var _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
    return typeof t;
} : function(t) {
    return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
}, _typeof = "function" == typeof Symbol && "symbol" == _typeof2(Symbol.iterator) ? function(t) {
    return void 0 === t ? "undefined" : _typeof2(t);
} : function(t) {
    return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : void 0 === t ? "undefined" : _typeof2(t);
};

!function(t) {
    "object" == ("undefined" == typeof exports ? "undefined" : _typeof(exports)) && "undefined" != typeof module ? t(exports) : "function" == typeof define && define.amd ? define([ "exports" ], t) : t((void 0).echarts = {});
}(function(t) {
    function S(t) {
        if (null == t || "object" != (void 0 === t ? "undefined" : _typeof(t))) return t;
        var e = t, n = is.call(t);
        if ("[object Array]" === n) {
            if (!d(t)) {
                e = [];
                for (var i = 0, o = t.length; i < o; i++) e[i] = S(t[i]);
            }
        } else if (ns[n]) {
            if (!d(t)) {
                var r = t.constructor;
                if (t.constructor.from) e = r.from(t); else for (e = new r(t.length), i = 0, o = t.length; i < o; i++) e[i] = S(t[i]);
            }
        } else if (!es[n] && !d(t) && !h(t)) for (var a in e = {}, t) t.hasOwnProperty(a) && (e[a] = S(t[a]));
        return e;
    }
    function g(t, e, n) {
        if (!D(e) || !D(t)) return n ? S(e) : t;
        for (var i in e) {
            var o, r;
            e.hasOwnProperty(i) && (o = t[i], !D(r = e[i]) || !D(o) || x(r) || x(o) || h(r) || h(o) || a(r) || a(o) || d(r) || d(o) ? !n && i in t || (t[i] = S(e[i])) : g(o, r, n));
        }
        return t;
    }
    function M(t, e) {
        for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
        return t;
    }
    function T(t, e, n) {
        for (var i in e) e.hasOwnProperty(i) && (n ? null != e[i] : null == t[i]) && (t[i] = e[i]);
        return t;
    }
    function m(t, e) {
        if (t) {
            if (t.indexOf) return t.indexOf(e);
            for (var n = 0, i = t.length; n < i; n++) if (t[n] === e) return n;
        }
        return -1;
    }
    function r(t, e) {
        function n() {}
        var i, o = t.prototype;
        for (i in n.prototype = e.prototype, t.prototype = new n(), o) t.prototype[i] = o[i];
        (t.prototype.constructor = t).superClass = e;
    }
    function e(t, e, n) {
        T(t = "prototype" in t ? t.prototype : t, e = "prototype" in e ? e.prototype : e, n);
    }
    function O(t) {
        return t ? "string" != typeof t && "number" == typeof t.length : void 0;
    }
    function I(t, e, n) {
        if (t && e) if (t.forEach && t.forEach === os) t.forEach(e, n); else if (t.length === +t.length) for (var i = 0, o = t.length; i < o; i++) e.call(n, t[i], i, t); else for (var r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);
    }
    function b(t, e, n) {
        if (t && e) {
            if (t.map && t.map === ss) return t.map(e, n);
            for (var i = [], o = 0, r = t.length; o < r; o++) i.push(e.call(n, t[o], o, t));
            return i;
        }
    }
    function l(t, e, n) {
        if (t && e) {
            if (t.filter && t.filter === rs) return t.filter(e, n);
            for (var i = [], o = 0, r = t.length; o < r; o++) e.call(n, t[o], o, t) && i.push(t[o]);
            return i;
        }
    }
    function v(t, e) {
        var n = as.call(arguments, 2);
        return function() {
            return t.apply(e, n.concat(as.call(arguments)));
        };
    }
    function s(t) {
        var e = as.call(arguments, 1);
        return function() {
            return t.apply(this, e.concat(as.call(arguments)));
        };
    }
    function x(t) {
        return "[object Array]" === is.call(t);
    }
    function f(t) {
        return "function" == typeof t;
    }
    function C(t) {
        return "[object String]" === is.call(t);
    }
    function D(t) {
        var e = void 0 === t ? "undefined" : _typeof(t);
        return "function" === e || !!t && "object" === e;
    }
    function a(t) {
        return es[is.call(t)];
    }
    function y(t) {
        return !!ns[is.call(t)];
    }
    function h(t) {
        return "object" == (void 0 === t ? "undefined" : _typeof(t)) && "number" == typeof t.nodeType && "object" == _typeof(t.ownerDocument);
    }
    function p(t) {
        return t != t;
    }
    function _() {
        for (var t = 0, e = arguments.length; t < e; t++) if (null != arguments[t]) return arguments[t];
    }
    function k(t, e) {
        return null != t ? t : e;
    }
    function A(t, e, n) {
        return null != t ? t : null != e ? e : n;
    }
    function i() {
        return Function.call.apply(as, arguments);
    }
    function o(t) {
        if ("number" == typeof t) return [ t, t, t, t ];
        var e = t.length;
        return 2 === e ? [ t[0], t[1], t[0], t[1] ] : 3 === e ? [ t[0], t[1], t[2], t[1] ] : t;
    }
    function w(t, e) {
        if (!t) throw new Error(e);
    }
    function u(t) {
        return null == t ? null : "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
    }
    function c(t) {
        t[us] = !0;
    }
    function d(t) {
        return t[us];
    }
    function P(t) {
        function e(t, e) {
            n ? i.set(t, e) : i.set(e, t);
        }
        var n = x(t);
        this.data = {};
        var i = this;
        t instanceof P ? t.each(e) : t && I(t, e);
    }
    function L(t) {
        return new P(t);
    }
    function E() {}
    function n(t, e) {
        var n = new cs(2);
        return null == t && (t = 0), null == e && (e = 0), n[0] = t, n[1] = e, n;
    }
    function B(t) {
        var e = new cs(2);
        return e[0] = t[0], e[1] = t[1], e;
    }
    function z(t, e, n) {
        return t[0] = e[0] + n[0], t[1] = e[1] + n[1], t;
    }
    function R(t, e, n) {
        return t[0] = e[0] - n[0], t[1] = e[1] - n[1], t;
    }
    function N(t, e, n) {
        return t[0] = e[0] * n, t[1] = e[1] * n, t;
    }
    function F(t, e) {
        return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]));
    }
    function H(t, e, n) {
        var i = e[0], e = e[1];
        return t[0] = n[0] * i + n[2] * e + n[4], t[1] = n[1] * i + n[3] * e + n[5], t;
    }
    function V(t, e, n) {
        return t[0] = Math.min(e[0], n[0]), t[1] = Math.min(e[1], n[1]), t;
    }
    function W(t, e, n) {
        return t[0] = Math.max(e[0], n[0]), t[1] = Math.max(e[1], n[1]), t;
    }
    function G() {
        this.on("mousedown", this._dragStart, this), this.on("mousemove", this._drag, this), 
        this.on("mouseup", this._dragEnd, this), this.on("globalout", this._dragEnd, this);
    }
    function X(t, e) {
        return {
            target: t,
            topTarget: e && e.topTarget
        };
    }
    function U(t, e, n, i, o, r) {
        var a, s, l = t._$handlers;
        if ("function" == typeof n && (o = i, i = n, n = null), !i || !e) return t;
        s = n, a = (a = t)._$eventProcessor, null != s && a && a.normalizeQuery && (s = a.normalizeQuery(s)), 
        n = s, l[e] || (l[e] = []);
        for (var h = 0; h < l[e].length; h++) if (l[e][h].h === i) return t;
        return r = {
            h: i,
            one: r,
            query: n,
            ctx: o || t,
            callAtLast: i.zrEventfulCallAtLast
        }, n = l[e].length - 1, (o = l[e][n]) && o.callAtLast ? l[e].splice(n, 0, r) : l[e].push(r), 
        t;
    }
    function Y(t, e, n, i, o, r) {
        var a = i + "-" + o, s = t.length;
        if (r.hasOwnProperty(a)) return r[a];
        if (1 === e) {
            var l = Math.round(Math.log((1 << s) - 1 & ~o) / ys);
            return t[n][l];
        }
        for (var h = i | 1 << n, u = n + 1; i & 1 << u; ) u++;
        for (var c = 0, d = 0, f = 0; d < s; d++) {
            var p = 1 << d;
            p & o || (c += (f % 2 ? -1 : 1) * t[n][d] * Y(t, e - 1, u, h, o | p, r), f++);
        }
        return r[a] = c;
    }
    function q(t, e, n, i) {
        return n = n || {}, i || !ts.canvasSupported ? j(t, e, n) : ts.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ? (n.zrX = e.layerX, 
        n.zrY = e.layerY) : null != e.offsetX ? (n.zrX = e.offsetX, n.zrY = e.offsetY) : j(t, e, n), 
        n;
    }
    function j(t, e, n) {
        if (t.getBoundingClientRect && ts.domSupported) {
            var i = e.clientX, e = e.clientY;
            if ("CANVAS" === t.nodeName.toUpperCase()) {
                var l = t.getBoundingClientRect();
                return n.zrX = i - l.left, n.zrY = e - l.top, 0;
            }
            if (l = t[xs] || (t[xs] = {}), l = function(t, e) {
                for (var n = e.transformer, i = e.srcCoords, o = !0, s = [], r = [], a = 0; a < 4; a++) {
                    var l = 2 * a, h = (u = t[a].getBoundingClientRect()).left, u = u.top;
                    s.push(h, u), o &= i && h === i[l] && u === i[1 + l], r.push(t[a].offsetLeft, t[a].offsetTop);
                }
                return o ? n : (e.srcCoords = s, e.transformer = function(t) {
                    var e = [ [ s[0], s[1], 1, 0, 0, 0, -t[0] * s[0], -t[0] * s[1] ], [ 0, 0, 0, s[0], s[1], 1, -t[1] * s[0], -t[1] * s[1] ], [ s[2], s[3], 1, 0, 0, 0, -t[2] * s[2], -t[2] * s[3] ], [ 0, 0, 0, s[2], s[3], 1, -t[3] * s[2], -t[3] * s[3] ], [ s[4], s[5], 1, 0, 0, 0, -t[4] * s[4], -t[4] * s[5] ], [ 0, 0, 0, s[4], s[5], 1, -t[5] * s[4], -t[5] * s[5] ], [ s[6], s[7], 1, 0, 0, 0, -t[6] * s[6], -t[6] * s[7] ], [ 0, 0, 0, s[6], s[7], 1, -t[7] * s[6], -t[7] * s[7] ] ], n = {}, i = Y(e, 8, 0, 0, 0, n);
                    if (0 !== i) {
                        for (var o = [], r = 0; r < 8; r++) for (var a = 0; a < 8; a++) null == o[a] && (o[a] = 0), 
                        o[a] += ((r + a) % 2 ? -1 : 1) * Y(e, 7, 0 === r ? 1 : 0, 1 << r, 1 << a, n) / i * t[r];
                        return function(t, e, n) {
                            var i = e * o[6] + n * o[7] + 1;
                            t[0] = (e * o[0] + n * o[1] + o[2]) / i, t[1] = (e * o[3] + n * o[4] + o[5]) / i;
                        };
                    }
                }(r));
            }(function(t) {
                var e = l.markers;
                if (e) return e;
                e = l.markers = [];
                for (var n = [ "left", "right" ], i = [ "top", "bottom" ], o = 0; o < 4; o++) {
                    var r = document.createElement("div"), a = o % 2, s = (o >> 1) % 2;
                    r.style.cssText = [ "position:absolute", "visibility: hidden", "padding: 0", "margin: 0", "border-width: 0", "width:0", "height:0", n[a] + ":0", i[s] + ":0", n[1 - a] + ":auto", i[1 - s] + ":auto", "" ].join("!important;"), 
                    t.appendChild(r), e.push(r);
                }
                return e;
            }(t), l)) return l(ws, i, e), n.zrX = ws[0], n.zrY = ws[1], 0;
        }
        n.zrX = n.zrY = 0;
    }
    function Z(t, e, n) {
        if (null != (e = e || window.event).zrX) return e;
        var i = e.type;
        return i && 0 <= i.indexOf("touch") ? (i = ("touchend" !== i ? e.targetTouches : e.changedTouches)[0]) && q(t, i, e, n) : (q(t, e, e, n), 
        e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3), n = e.button, 
        null == e.which && void 0 !== n && _s.test(e.type) && (e.which = 1 & n ? 1 : 2 & n ? 3 : 4 & n ? 2 : 0), 
        e;
    }
    function K(t) {
        var e = t[1][0] - t[0][0], t = t[1][1] - t[0][1];
        return Math.sqrt(e * e + t * t);
    }
    function $() {
        bs(this.event);
    }
    function Q() {}
    function J() {
        var t = new Is(6);
        return tt(t), t;
    }
    function tt(t) {
        return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 1, t[4] = 0, t[5] = 0, t;
    }
    function et(t, e, n) {
        var i = e[0] * n[0] + e[2] * n[1], o = e[1] * n[0] + e[3] * n[1], r = e[0] * n[2] + e[2] * n[3], a = e[1] * n[2] + e[3] * n[3], s = e[0] * n[4] + e[2] * n[5] + e[4], e = e[1] * n[4] + e[3] * n[5] + e[5];
        return t[0] = i, t[1] = o, t[2] = r, t[3] = a, t[4] = s, t[5] = e, t;
    }
    function nt(t, e, n) {
        return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4] + n[0], t[5] = e[5] + n[1], 
        t;
    }
    function it(t, e, n) {
        var i = e[0], o = e[2], r = e[4], a = e[1], s = e[3], l = e[5], e = Math.sin(n), n = Math.cos(n);
        return t[0] = i * n + a * e, t[1] = -i * e + a * n, t[2] = o * n + s * e, t[3] = -o * e + n * s, 
        t[4] = n * r + e * l, t[5] = n * l - e * r, t;
    }
    function ot(t, e, n) {
        var i = n[0], n = n[1];
        return t[0] = e[0] * i, t[1] = e[1] * n, t[2] = e[2] * i, t[3] = e[3] * n, t[4] = e[4] * i, 
        t[5] = e[5] * n, t;
    }
    function rt(t, e) {
        var n = e[0], i = e[2], o = e[4], r = e[1], a = e[3], s = e[5];
        return (e = n * a - r * i) ? (e = 1 / e, t[0] = a * e, t[1] = -r * e, t[2] = -i * e, 
        t[3] = n * e, t[4] = (i * s - a * o) * e, t[5] = (r * o - n * s) * e, t) : null;
    }
    function at(t) {
        return 5e-5 < t || t < -5e-5;
    }
    function st(t) {
        this._target = t.target, this._life = t.life || 1e3, this._delay = t.delay || 0, 
        this._initialized = !1, this.loop = null != t.loop && t.loop, this.gap = t.gap || 0, 
        this.easing = t.easing || "Linear", this.onframe = t.onframe, this.ondestroy = t.ondestroy, 
        this.onrestart = t.onrestart, this._pausedTime = 0, this._paused = !1;
    }
    function lt(t) {
        return (t = Math.round(t)) < 0 ? 0 : 255 < t ? 255 : t;
    }
    function ht(t) {
        return lt(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 * 255 : parseInt(t, 10));
    }
    function ut(t) {
        return (t = t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 : parseFloat(t)) < 0 ? 0 : 1 < t ? 1 : t;
    }
    function ct(t, e, n) {
        return n < 0 ? n += 1 : 1 < n && --n, 6 * n < 1 ? t + (e - t) * n * 6 : 2 * n < 1 ? e : 3 * n < 2 ? t + (e - t) * (2 / 3 - n) * 6 : t;
    }
    function dt(t, e, n, i, o) {
        return t[0] = e, t[1] = n, t[2] = i, t[3] = o, t;
    }
    function ft(t, e) {
        return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t;
    }
    function pt(t, e) {
        Ns && ft(Ns, e), Ns = Rs.put(t, Ns || e.slice());
    }
    function gt(t, e) {
        if (t) {
            if (e = e || [], o = Rs.get(t)) return ft(e, o);
            var n = (t += "").replace(/ /g, "").toLowerCase();
            if (n in zs) return ft(e, zs[n]), pt(t, e), e;
            if ("#" === n.charAt(0)) return 4 === n.length ? 0 <= (r = parseInt(n.substr(1), 16)) && r <= 4095 ? (dt(e, (3840 & r) >> 4 | (3840 & r) >> 8, 240 & r | (240 & r) >> 4, 15 & r | (15 & r) << 4, 1), 
            pt(t, e), e) : void dt(e, 0, 0, 0, 1) : 7 === n.length ? 0 <= (r = parseInt(n.substr(1), 16)) && r <= 16777215 ? (dt(e, (16711680 & r) >> 16, (65280 & r) >> 8, 255 & r, 1), 
            pt(t, e), e) : void dt(e, 0, 0, 0, 1) : void 0;
            var i = n.indexOf("("), o = n.indexOf(")");
            if (-1 !== i && o + 1 === n.length) {
                var r = n.substr(0, i), a = n.substr(i + 1, o - (i + 1)).split(","), s = 1;
                switch (r) {
                  case "rgba":
                    if (4 !== a.length) return void dt(e, 0, 0, 0, 1);
                    s = ut(a.pop());

                  case "rgb":
                    return 3 !== a.length ? void dt(e, 0, 0, 0, 1) : (dt(e, ht(a[0]), ht(a[1]), ht(a[2]), s), 
                    pt(t, e), e);

                  case "hsla":
                    return 4 !== a.length ? void dt(e, 0, 0, 0, 1) : (a[3] = ut(a[3]), mt(a, e), pt(t, e), 
                    e);

                  case "hsl":
                    return 3 !== a.length ? void dt(e, 0, 0, 0, 1) : (mt(a, e), pt(t, e), e);

                  default:
                    return;
                }
            }
            dt(e, 0, 0, 0, 1);
        }
    }
    function mt(t, e) {
        var n = (parseFloat(t[0]) % 360 + 360) % 360 / 360, i = ut(t[1]), o = ut(t[2]);
        return dt(e = e || [], lt(255 * ct(o = 2 * o - (i = o <= .5 ? o * (i + 1) : o + i - o * i), i, n + 1 / 3)), lt(255 * ct(o, i, n)), lt(255 * ct(o, i, n - 1 / 3)), 1), 
        4 === t.length && (e[3] = t[3]), e;
    }
    function yt(t, e) {
        if (t && t.length) {
            var n = t[0] + "," + t[1] + "," + t[2];
            return "rgba" !== e && "hsva" !== e && "hsla" !== e || (n += "," + t[3]), e + "(" + n + ")";
        }
    }
    function vt(t, e) {
        return t[e];
    }
    function _t(t, e, n) {
        t[e] = n;
    }
    function xt(t, e, n) {
        return (e - t) * n + t;
    }
    function wt(t, e, n, i, o) {
        var r = t.length;
        if (1 === o) for (var a = 0; a < r; a++) i[a] = xt(t[a], e[a], n); else for (var s = r && t[0].length, a = 0; a < r; a++) for (var l = 0; l < s; l++) i[a][l] = xt(t[a][l], e[a][l], n);
    }
    function bt(t, e, n) {
        var i = t.length, o = e.length;
        if (i !== o) if (o < i) t.length = o; else for (var r = i; r < o; r++) t.push(1 === n ? e[r] : Fs.call(e[r]));
        for (var a = t[0] && t[0].length, r = 0; r < t.length; r++) if (1 === n) isNaN(t[r]) && (t[r] = e[r]); else for (var s = 0; s < a; s++) isNaN(t[r][s]) && (t[r][s] = e[r][s]);
    }
    function St(t, e, n, i, o, r, a, s, l) {
        var h = t.length;
        if (1 === l) for (var u = 0; u < h; u++) s[u] = Mt(t[u], e[u], n[u], i[u], o, r, a); else for (var c = t[0].length, u = 0; u < h; u++) for (var d = 0; d < c; d++) s[u][d] = Mt(t[u][d], e[u][d], n[u][d], i[u][d], o, r, a);
    }
    function Mt(t, e, n, i, o, r, a) {
        return (2 * (e - n) + (t = .5 * (n - t)) + (i = .5 * (i - e))) * a + (-3 * (e - n) - 2 * t - i) * r + t * o + e;
    }
    function Tt(t) {
        return t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.floor(t[2]), 
        "rgba(" + t.join(",") + ")";
    }
    function It(t, e, n, i, a, o) {
        var r, s = t._getter, l = t._setter, h = "spline" === e, u = i.length;
        if (u) {
            var c, d = O(i[0].value), f = !1, p = !1, g = d ? O((r = (r = i)[r.length - 1].value) && r[0]) ? 2 : 1 : 0;
            i.sort(function(t, e) {
                return t.time - e.time;
            }), c = i[u - 1].time;
            for (var m = [], y = [], v = i[0].value, _ = !0, x = 0; x < u; x++) {
                m.push(i[x].time / c);
                var w, b = i[x].value;
                d && function(t, e) {
                    if (t === e) return 1;
                    var n = t.length;
                    if (n === e.length) {
                        if (1 == g) {
                            for (var i = 0; i < n; i++) if (t[i] !== e[i]) return;
                        } else for (var o = t[0].length, i = 0; i < n; i++) for (var r = 0; r < o; r++) if (t[i][r] !== e[i][r]) return;
                        return 1;
                    }
                }(b, v) || !d && b === v || (_ = !1), "string" == typeof (v = b) && ((w = gt(b)) ? (b = w, 
                f = !0) : p = !0), y.push(b);
            }
            if (o || !_) {
                for (var S = y[u - 1], x = 0; x < u - 1; x++) d ? bt(y[x], S, g) : !isNaN(y[x]) || isNaN(S) || p || f || (y[x] = S);
                d && bt(s(t._target, a), S, g);
                var M, T, I, C, D, k, A = 0, P = 0;
                return f && (k = [ 0, 0, 0, 0 ]), n = new st({
                    target: t._target,
                    life: c,
                    loop: t._loop,
                    delay: t._delay,
                    onframe: function(t, e) {
                        var n;
                        if (e < 0) n = 0; else if (e < P) {
                            for (n = Math.min(A + 1, u - 1); 0 <= n && !(m[n] <= e); n--) ;
                            n = Math.min(n, u - 2);
                        } else {
                            for (n = A; n < u && !(m[n] > e); n++) ;
                            n = Math.min(n - 1, u - 2);
                        }
                        P = e;
                        var i, o, r = m[(A = n) + 1] - m[n];
                        if (0 != r) if (M = (e - m[n]) / r, h) if (I = y[n], T = y[0 === n ? n : n - 1], 
                        C = y[u - 2 < n ? u - 1 : n + 1], D = y[u - 3 < n ? u - 1 : n + 2], d) St(T, I, C, D, M, M * M, M * M * M, s(t, a), g); else {
                            if (f) i = St(T, I, C, D, M, M * M, M * M * M, k, 1), i = Tt(k); else {
                                if (p) return .5 < M ? C : I;
                                i = Mt(T, I, C, D, M, M * M, M * M * M);
                            }
                            l(t, a, i);
                        } else if (d) wt(y[n], y[n + 1], M, s(t, a), g); else {
                            if (f) wt(y[n], y[n + 1], M, k, 1), i = Tt(k); else {
                                if (p) return o = y[n], r = y[n + 1], .5 < M ? r : o;
                                i = xt(y[n], y[n + 1], M);
                            }
                            l(t, a, i);
                        }
                    },
                    ondestroy: n
                }), e && "spline" !== e && (n.easing = e), n;
            }
        }
    }
    function Ct(t, e, n, i, o, r, a, s) {
        function l() {
            --u || r && r();
        }
        C(i) ? (r = o, o = i, i = 0) : f(o) ? (r = o, o = "linear", i = 0) : f(i) ? (r = i, 
        i = 0) : n = f(n) ? (r = n, 500) : n || 500, t.stopAnimation(), function t(e, n, i, o, r, a, s) {
            var l, h = {}, u = 0;
            for (l in o) o.hasOwnProperty(l) && (null != i[l] ? D(o[l]) && !O(o[l]) ? t(e, n ? n + "." + l : l, i[l], o[l], r, a, s) : (s ? (h[l] = i[l], 
            Dt(e, n, l, o[l])) : h[l] = o[l], u++) : null == o[l] || s || Dt(e, n, l, o[l]));
            0 < u && e.animate(n, !1).when(null == r ? 500 : r, h).delay(a || 0);
        }(t, "", t, e, n, i, s);
        var h = t.animators.slice(), u = h.length;
        u || r && r();
        for (var c = 0; c < h.length; c++) h[c].done(l).start(o, a);
    }
    function Dt(t, e, n, i) {
        var o;
        e ? ((o = {})[e] = {}, o[e][n] = i, t.attr(o)) : t.attr(n, i);
    }
    function kt(t, e, n, i) {
        n < 0 && (t += n, n = -n), i < 0 && (e += i, i = -i), this.x = t, this.y = e, this.width = n, 
        this.height = i;
    }
    function At(t, e, n, i) {
        var o = e + 1;
        if (o === n) return 1;
        if (i(t[o++], t[e]) < 0) {
            for (;o < n && i(t[o], t[o - 1]) < 0; ) o++;
            !function(t, e, n) {
                for (n--; e < n; ) {
                    var i = t[e];
                    t[e++] = t[n], t[n--] = i;
                }
            }(t, e, o);
        } else for (;o < n && 0 <= i(t[o], t[o - 1]); ) o++;
        return o - e;
    }
    function Pt(t, e, n, i, o) {
        for (i === e && i++; i < n; i++) {
            for (var r, a = t[i], s = e, l = i; s < l; ) o(a, t[r = s + l >>> 1]) < 0 ? l = r : s = 1 + r;
            var h = i - s;
            switch (h) {
              case 3:
                t[s + 3] = t[s + 2];

              case 2:
                t[s + 2] = t[s + 1];

              case 1:
                t[s + 1] = t[s];
                break;

              default:
                for (;0 < h; ) t[s + h] = t[s + h - 1], h--;
            }
            t[s] = a;
        }
    }
    function Ot(t, e, n, i, o, r) {
        var a = 0, s = 0, l = 1;
        if (0 < r(t, e[n + o])) {
            for (s = i - o; l < s && 0 < r(t, e[n + o + l]); ) (l = 1 + ((a = l) << 1)) <= 0 && (l = s);
            s < l && (l = s), a += o, l += o;
        } else {
            for (s = o + 1; l < s && r(t, e[n + o - l]) <= 0; ) (l = 1 + ((a = l) << 1)) <= 0 && (l = s);
            s < l && (l = s), i = a, a = o - l, l = o - i;
        }
        for (a++; a < l; ) {
            var h = a + (l - a >>> 1);
            0 < r(t, e[n + h]) ? a = h + 1 : l = h;
        }
        return l;
    }
    function Lt(t, e, n, i, o, r) {
        var a = 0, s = 0, l = 1;
        if (r(t, e[n + o]) < 0) {
            for (s = o + 1; l < s && r(t, e[n + o - l]) < 0; ) (l = 1 + ((a = l) << 1)) <= 0 && (l = s);
            s < l && (l = s);
            var h = a, a = o - l, l = o - h;
        } else {
            for (s = i - o; l < s && 0 <= r(t, e[n + o + l]); ) (l = 1 + ((a = l) << 1)) <= 0 && (l = s);
            s < l && (l = s), a += o, l += o;
        }
        for (a++; a < l; ) {
            var u = a + (l - a >>> 1);
            r(t, e[n + u]) < 0 ? l = u : a = u + 1;
        }
        return l;
    }
    function Et(p, g) {
        function e(t) {
            var e = a[t], n = s[t], i = a[t + 1], o = s[t + 1];
            s[t] = n + o, t === r - 3 && (a[t + 1] = a[t + 2], s[t + 1] = s[t + 2]), r--, e += t = Lt(p[i], p, e, n, 0, g), 
            0 == (n -= t) || 0 !== (o = Ot(p[e + n - 1], p, i, o, o - 1, g)) && (n <= o ? function(t, e, n, i) {
                for (var o = 0, o = 0; o < e; o++) y[o] = p[t + o];
                var r = 0, a = n, s = t;
                if (p[s++] = p[a++], 0 != --i) if (1 !== e) {
                    for (var l, h, u, c = m; ;) {
                        h = l = 0, u = !1;
                        do {
                            if (g(p[a], y[r]) < 0) {
                                if (p[s++] = p[a++], h++, (l = 0) == --i) {
                                    u = !0;
                                    break;
                                }
                            } else if (p[s++] = y[r++], l++, h = 0, 1 == --e) {
                                u = !0;
                                break;
                            }
                        } while ((l | h) < c);
                        if (u) break;
                        do {
                            if (0 !== (l = Lt(p[a], y, r, e, 0, g))) {
                                for (o = 0; o < l; o++) p[s + o] = y[r + o];
                                if (s += l, r += l, (e -= l) <= 1) {
                                    u = !0;
                                    break;
                                }
                            }
                            if (p[s++] = p[a++], 0 == --i) {
                                u = !0;
                                break;
                            }
                            if (0 !== (h = Ot(y[r], p, a, i, 0, g))) {
                                for (o = 0; o < h; o++) p[s + o] = p[a + o];
                                if (s += h, a += h, 0 == (i -= h)) {
                                    u = !0;
                                    break;
                                }
                            }
                            if (p[s++] = y[r++], 1 == --e) {
                                u = !0;
                                break;
                            }
                        } while (c--, el <= l || el <= h);
                        if (u) break;
                        c < 0 && (c = 0), c += 2;
                    }
                    if ((m = c) < 1 && (m = 1), 1 === e) {
                        for (o = 0; o < i; o++) p[s + o] = p[a + o];
                        p[s + i] = y[r];
                    } else {
                        if (0 === e) throw new Error();
                        for (o = 0; o < e; o++) p[s + o] = y[r + o];
                    }
                } else {
                    for (o = 0; o < i; o++) p[s + o] = p[a + o];
                    p[s + i] = y[r];
                } else for (o = 0; o < e; o++) p[s + o] = y[r + o];
            } : function(t, e, n, i) {
                for (var o = 0, o = 0; o < i; o++) y[o] = p[n + o];
                var r = t + e - 1, a = i - 1, s = n + i - 1, l = 0, h = 0;
                if (p[s--] = p[r--], 0 != --e) if (1 !== i) {
                    for (var u = m; ;) {
                        var c = 0, d = 0, f = !1;
                        do {
                            if (g(y[a], p[r]) < 0) {
                                if (p[s--] = p[r--], c++, (d = 0) == --e) {
                                    f = !0;
                                    break;
                                }
                            } else if (p[s--] = y[a--], d++, c = 0, 1 == --i) {
                                f = !0;
                                break;
                            }
                        } while ((c | d) < u);
                        if (f) break;
                        do {
                            if (0 != (c = e - Lt(y[a], p, t, e, e - 1, g))) {
                                for (e -= c, h = 1 + (s -= c), l = 1 + (r -= c), o = c - 1; 0 <= o; o--) p[h + o] = p[l + o];
                                if (0 === e) {
                                    f = !0;
                                    break;
                                }
                            }
                            if (p[s--] = y[a--], 1 == --i) {
                                f = !0;
                                break;
                            }
                            if (0 != (d = i - Ot(p[r], y, 0, i, i - 1, g))) {
                                for (i -= d, h = 1 + (s -= d), l = 1 + (a -= d), o = 0; o < d; o++) p[h + o] = y[l + o];
                                if (i <= 1) {
                                    f = !0;
                                    break;
                                }
                            }
                            if (p[s--] = p[r--], 0 == --e) {
                                f = !0;
                                break;
                            }
                        } while (u--, el <= c || el <= d);
                        if (f) break;
                        u < 0 && (u = 0), u += 2;
                    }
                    if ((m = u) < 1 && (m = 1), 1 === i) {
                        for (h = 1 + (s -= e), l = 1 + (r -= e), o = e - 1; 0 <= o; o--) p[h + o] = p[l + o];
                        p[s] = y[a];
                    } else {
                        if (0 === i) throw new Error();
                        for (l = s - (i - 1), o = 0; o < i; o++) p[l + o] = y[o];
                    }
                } else {
                    for (h = 1 + (s -= e), l = 1 + (r -= e), o = e - 1; 0 <= o; o--) p[h + o] = p[l + o];
                    p[s] = y[a];
                } else for (l = s - (i - 1), o = 0; o < i; o++) p[l + o] = y[o];
            })(e, n, i, o);
        }
        var m = el, r = 0, y = [], a = [], s = [];
        this.mergeRuns = function() {
            for (;1 < r; ) {
                var t = r - 2;
                if (1 <= t && s[t - 1] <= s[t] + s[t + 1] || 2 <= t && s[t - 2] <= s[t] + s[t - 1]) s[t - 1] < s[t + 1] && t--; else if (s[t] > s[t + 1]) break;
                e(t);
            }
        }, this.forceMergeRuns = function() {
            for (;1 < r; ) {
                var t = r - 2;
                0 < t && s[t - 1] < s[t + 1] && t--, e(t);
            }
        }, this.pushRun = function(t, e) {
            a[r] = t, s[r] = e, r += 1;
        };
    }
    function Bt(t, e, n, i) {
        n = n || 0;
        var o = (i = i || t.length) - n;
        if (!(o < 2)) {
            var r = 0;
            if (o < tl) return Pt(t, n, i, n + (r = At(t, n, i, e)), e), 0;
            for (var a, s = new Et(t, e), l = function(t) {
                for (var e = 0; tl <= t; ) e |= 1 & t, t >>= 1;
                return t + e;
            }(o); (r = At(t, n, i, e)) < l && (l < (a = o) && (a = l), Pt(t, n, n + a, n + r, e), 
            r = a), s.pushRun(n, r), s.mergeRuns(), n += r, 0 != (o -= r); ) ;
            s.forceMergeRuns();
        }
    }
    function zt(t, e) {
        return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2 : t.z - e.z : t.zlevel - e.zlevel;
    }
    function Rt() {
        return !1;
    }
    function Nt(t, e, n) {
        var i = Za(), o = e.getWidth(), r = e.getHeight();
        return (e = i.style) && (e.position = "absolute", e.left = 0, e.top = 0, e.width = o + "px", 
        e.height = r + "px", i.setAttribute("data-zr-dom-id", t)), i.width = o * n, i.height = r * n, 
        i;
    }
    function Ft(t, e, n, i, o) {
        if (t) {
            if ("string" != typeof t) return t;
            if (e && e.__zrImageSrc === t || !n) return e;
            var r = gl.get(t), o = {
                hostEl: n,
                cb: i,
                cbPayload: o
            };
            return r ? Vt(e = r.image) || r.pending.push(o) : ((e = new Image()).onload = e.onerror = Ht, 
            gl.put(t, e.__cachedImgObj = {
                image: e,
                pending: [ o ]
            }), e.src = e.__zrImageSrc = t), e;
        }
        return e;
    }
    function Ht() {
        var t = this.__cachedImgObj;
        this.onload = this.onerror = this.__cachedImgObj = null;
        for (var e = 0; e < t.pending.length; e++) {
            var n = t.pending[e], i = n.cb;
            i && i(this, n.cbPayload), n.hostEl.dirty();
        }
        t.pending.length = 0;
    }
    function Vt(t) {
        return t && t.width && t.height;
    }
    function Wt(t, e) {
        var n = t + ":" + (e = e || xl);
        if (ml[n]) return ml[n];
        for (var i, o = (t + "").split("\n"), r = 0, a = 0, s = o.length; a < s; a++) r = Math.max((i = o[a], 
        wl.measureText(i, e)).width, r);
        return vl < yl && (yl = 0, ml = {}), yl++, ml[n] = r;
    }
    function Gt(t, e, n, i, o, r, a, s) {
        return a ? (h = i, a = (u = Qt(t, {
            rich: a,
            truncate: s,
            font: e,
            textAlign: l = n,
            textPadding: u = o,
            textLineHeight: a = r
        })).outerWidth, u = u.outerHeight, new kt(Xt(0, a, l), Ut(0, u, h), a, u)) : (n = n, 
        i = i, s = $t(t = t, e = e, o = o, r, s = s), e = Wt(t, e), o && (e += o[1] + o[3]), 
        o = s.outerHeight, (o = new kt(Xt(0, e, n), Ut(0, o, i), e, o)).lineHeight = s.lineHeight, 
        o);
        var l, h, u;
    }
    function Xt(t, e, n) {
        return "right" === n ? t -= e : "center" === n && (t -= e / 2), t;
    }
    function Ut(t, e, n) {
        return "middle" === n ? t -= e / 2 : "bottom" === n && (t -= e), t;
    }
    function Yt(t, e, n) {
        var i = e.textPosition, o = e.textDistance, r = n.x, a = n.y, s = n.height, l = n.width, h = s / 2, u = "left", c = "top";
        switch (i) {
          case "left":
            r -= o, a += h, u = "right", c = "middle";
            break;

          case "right":
            r += o + l, a += h, c = "middle";
            break;

          case "top":
            r += l / 2, a -= o, u = "center", c = "bottom";
            break;

          case "bottom":
            r += l / 2, a += s + o, u = "center";
            break;

          case "inside":
            r += l / 2, a += h, u = "center", c = "middle";
            break;

          case "insideLeft":
            r += o, a += h, c = "middle";
            break;

          case "insideRight":
            r += l - o, a += h, u = "right", c = "middle";
            break;

          case "insideTop":
            r += l / 2, a += o, u = "center";
            break;

          case "insideBottom":
            r += l / 2, a += s - o, u = "center", c = "bottom";
            break;

          case "insideTopLeft":
            r += o, a += o;
            break;

          case "insideTopRight":
            r += l - o, a += o, u = "right";
            break;

          case "insideBottomLeft":
            r += o, a += s - o, c = "bottom";
            break;

          case "insideBottomRight":
            r += l - o, a += s - o, u = "right", c = "bottom";
        }
        return (t = t || {}).x = r, t.y = a, t.textAlign = u, t.textVerticalAlign = c, t;
    }
    function qt(t, e, n, i, o) {
        if (!e) return "";
        var r = (t + "").split("\n");
        o = jt(e, n, i, o);
        for (var a = 0, s = r.length; a < s; a++) r[a] = Zt(r[a], o);
        return r.join("\n");
    }
    function jt(t, e, n, i) {
        (i = M({}, i)).font = e, n = k(n, "..."), i.maxIterations = k(i.maxIterations, 2);
        var o = i.minChar = k(i.minChar, 0);
        i.cnCharWidth = Wt("国", e);
        var r = i.ascCharWidth = Wt("a", e);
        i.placeholder = k(i.placeholder, "");
        for (var a = t = Math.max(0, t - 1), s = 0; s < o && r <= a; s++) a -= r;
        return a < (e = Wt(n, e)) && (n = "", e = 0), a = t - e, i.ellipsis = n, i.ellipsisWidth = e, 
        i.contentWidth = a, i.containerWidth = t, i;
    }
    function Zt(t, e) {
        var n = e.containerWidth, i = e.font, o = e.contentWidth;
        if (!n) return "";
        if ((s = Wt(t, i)) <= n) return t;
        for (var r = 0; ;r++) {
            if (s <= o || r >= e.maxIterations) {
                t += e.ellipsis;
                break;
            }
            var a = 0 === r ? function(t, e, n, i) {
                for (var o = 0, r = 0, a = t.length; r < a && o < e; r++) {
                    var s = t.charCodeAt(r);
                    o += 0 <= s && s <= 127 ? n : i;
                }
                return r;
            }(t, o, e.ascCharWidth, e.cnCharWidth) : 0 < s ? Math.floor(t.length * o / s) : 0, s = Wt(t = t.substr(0, a), i);
        }
        return "" === t && (t = e.placeholder), t;
    }
    function Kt(t) {
        return Wt("国", t);
    }
    function $t(t, e, n, i, o) {
        null != t && (t += "");
        var r = k(i, Kt(e)), a = t ? t.split("\n") : [], s = a.length * r, l = s;
        if (n && (l += n[0] + n[2]), t && o) {
            var h = o.outerHeight, i = o.outerWidth;
            if (null != h && h < l) t = "", a = []; else if (null != i) for (var u = jt(i - (n ? n[1] + n[3] : 0), e, o.ellipsis, {
                minChar: o.minChar,
                placeholder: o.placeholder
            }), c = 0, d = a.length; c < d; c++) a[c] = Zt(a[c], u);
        }
        return {
            lines: a,
            height: s,
            outerHeight: l,
            lineHeight: r
        };
    }
    function Qt(t, e) {
        var n = {
            lines: [],
            width: 0,
            height: 0
        };
        if (null != t && (t += ""), !t) return n;
        for (var i, o = _l.lastIndex = 0; null != (i = _l.exec(t)); ) {
            var r = i.index;
            o < r && Jt(n, t.substring(o, r)), Jt(n, i[2], i[1]), o = _l.lastIndex;
        }
        o < t.length && Jt(n, t.substring(o, t.length));
        var a = n.lines, s = 0, l = 0, h = [], u = e.textPadding, c = e.truncate, d = c && c.outerWidth, f = c && c.outerHeight;
        u && (null != d && (d -= u[1] + u[3]), null != f && (f -= u[0] + u[2]));
        for (var p = 0; p < a.length; p++) {
            for (var g = a[p], m = 0, y = 0, v = 0; v < g.tokens.length; v++) {
                var _ = (C = g.tokens[v]).styleName && e.rich[C.styleName] || {}, x = C.textPadding = _.textPadding, w = C.font = _.font || e.font, b = C.textHeight = k(_.textHeight, Kt(w));
                if (x && (b += x[0] + x[2]), C.height = b, C.lineHeight = A(_.textLineHeight, e.textLineHeight, b), 
                C.textAlign = _ && _.textAlign || e.textAlign, C.textVerticalAlign = _ && _.textVerticalAlign || "middle", 
                null != f && s + C.lineHeight > f) return {
                    lines: [],
                    width: 0,
                    height: 0
                };
                C.textWidth = Wt(C.text, w);
                var S, M, T = _.textWidth, I = null == T || "auto" === T;
                "string" == typeof T && "%" === T.charAt(T.length - 1) ? (C.percentWidth = T, h.push(C), 
                T = 0) : (I && (T = C.textWidth, !(M = (S = _.textBackgroundColor) && S.image) || Vt(M = "string" != typeof (S = M) ? S : (S = gl.get(S)) && S.image) && (T = Math.max(T, M.width * b / M.height))), 
                T += M = x ? x[1] + x[3] : 0, null != (x = null != d ? d - y : null) && x < T && (!I || x < M ? (C.text = "", 
                C.textWidth = T = 0) : (C.text = qt(C.text, x - M, w, c.ellipsis, {
                    minChar: c.minChar
                }), C.textWidth = Wt(C.text, w), T = C.textWidth + M))), y += C.width = T, _ && (m = Math.max(m, C.lineHeight));
            }
            g.width = y, s += g.lineHeight = m, l = Math.max(l, y);
        }
        for (n.outerWidth = n.width = k(e.textWidth, l), n.outerHeight = n.height = k(e.textHeight, s), 
        u && (n.outerWidth += u[1] + u[3], n.outerHeight += u[0] + u[2]), p = 0; p < h.length; p++) {
            var C, D = (C = h[p]).percentWidth;
            C.width = parseInt(D, 10) / 100 * l;
        }
        return n;
    }
    function Jt(t, e, n) {
        for (var i = "" === e, o = e.split("\n"), r = t.lines, a = 0; a < o.length; a++) {
            var s, l, h = o[a], u = {
                styleName: n,
                text: h,
                isLineHolder: !h && !i
            };
            a ? r.push({
                tokens: [ u ]
            }) : 1 === (l = (s = (r[r.length - 1] || (r[0] = {
                tokens: []
            })).tokens).length) && s[0].isLineHolder ? s[0] = u : !h && l && !i || s.push(u);
        }
    }
    function te(t, e) {
        var n, i, o, r, a, s = e.x, l = e.y, h = e.width, u = e.height;
        h < 0 && (s += h, h = -h), u < 0 && (l += u, u = -u), "number" == typeof (e = e.r) ? n = i = o = r = e : e instanceof Array ? 1 === e.length ? n = i = o = r = e[0] : 2 === e.length ? (n = o = e[0], 
        i = r = e[1]) : 3 === e.length ? (n = e[0], i = r = e[1], o = e[2]) : (n = e[0], 
        i = e[1], o = e[2], r = e[3]) : n = i = o = r = 0, h < n + i && (n *= h / (a = n + i), 
        i *= h / a), h < o + r && (o *= h / (a = o + r), r *= h / a), u < i + o && (i *= u / (a = i + o), 
        o *= u / a), u < n + r && (n *= u / (a = n + r), r *= u / a), t.moveTo(s + n, l), 
        t.lineTo(s + h - i, l), 0 !== i && t.arc(s + h - i, l + i, i, -Math.PI / 2, 0), 
        t.lineTo(s + h, l + u - o), 0 !== o && t.arc(s + h - o, l + u - o, o, 0, Math.PI / 2), 
        t.lineTo(s + r, l + u), 0 !== r && t.arc(s + r, l + u - r, r, Math.PI / 2, Math.PI), 
        t.lineTo(s, l + n), 0 !== n && t.arc(s + n, l + n, n, Math.PI, 1.5 * Math.PI);
    }
    function ee(t) {
        return ne(t), I(t.rich, ne), t;
    }
    function ne(t) {
        var e, n;
        t && (t.font = (n = ((e = t).fontSize || e.fontFamily) && [ e.fontStyle, e.fontWeight, (e.fontSize || 12) + "px", e.fontFamily || "sans-serif" ].join(" ")) && u(n) || e.textFont || e.font, 
        "middle" === (e = t.textAlign) && (e = "center"), t.textAlign = null == e || Sl[e] ? e : "left", 
        "center" === (e = t.textVerticalAlign || t.textBaseline) && (e = "middle"), t.textVerticalAlign = null == e || Ml[e] ? e : "top", 
        t.textPadding && (t.textPadding = o(t.textPadding)));
    }
    function ie(t, e, n, i, o, r) {
        (i.rich ? function(t, e, n, i, o, r) {
            9 !== r && (e.__attrCachedBy = ol), (r = t.__textCotentBlock) && !t.__dirtyText || (r = t.__textCotentBlock = Qt(n, i)), 
            function(t, e, n, i, o) {
                var r = n.width, a = n.outerWidth, s = n.outerHeight, l = i.textPadding, h = (d = he(Cl, t, i, o)).baseX, u = d.baseY, c = d.textAlign, d = d.textVerticalAlign;
                oe(e, i, o, h, u);
                var f = c = Xt(h, a, c), p = d = Ut(u, s, d);
                l && (f += l[3], p += l[0]);
                var g = f + r;
                ae(i) && se(t, e, i, c, d, a, s);
                for (var m = 0; m < n.lines.length; m++) {
                    for (var y, v = n.lines[m], _ = v.tokens, x = _.length, w = v.lineHeight, b = v.width, S = 0, M = f, T = g, I = x - 1; S < x && (!(y = _[S]).textAlign || "left" === y.textAlign); ) re(t, e, y, i, w, p, M, "left"), 
                    b -= y.width, M += y.width, S++;
                    for (;0 <= I && "right" === (y = _[I]).textAlign; ) re(t, e, y, i, w, p, T, "right"), 
                    b -= y.width, T -= y.width, I--;
                    for (M += (r - (M - f) - (g - T) - b) / 2; S <= I; ) re(t, e, y = _[S], i, w, p, M + y.width / 2, "center"), 
                    M += y.width, S++;
                    p += w;
                }
            }(t, e, r, i, o);
        } : function(t, e, n, i, o, r) {
            var a, s = ae(i), l = !1, h = e.__attrCachedBy === al;
            9 !== r ? (r && (a = r.style, l = !s && h && a), e.__attrCachedBy = s ? ol : al) : h && (e.__attrCachedBy = ol);
            var u = i.font || bl;
            l && u === (a.font || bl) || (e.font = u);
            var c = t.__computedFont;
            t.__styleFont !== u && (t.__styleFont = u, c = t.__computedFont = e.font);
            var d = i.textPadding, f = i.textLineHeight;
            (m = t.__textCotentBlock) && !t.__dirtyText || (m = t.__textCotentBlock = $t(n, c, d, f, i.truncate));
            var r = m.outerHeight, p = m.lines, g = m.lineHeight, u = (h = he(Cl, t, i, o)).baseX, f = h.baseY, m = h.textAlign || "left", h = h.textVerticalAlign;
            oe(e, i, o, u, f);
            var y = u, v = h = Ut(f, r, h);
            (s || d) && (n = Wt(n, c), d && (n += d[1] + d[3]), c = Xt(u, n, m), s && se(t, e, i, c, h, n, r), 
            d && (y = pe(u, m, d), v += d[0])), e.textAlign = m, e.textBaseline = "middle", 
            e.globalAlpha = i.opacity || 1;
            for (var _ = 0; _ < Tl.length; _++) {
                var x = Tl[_], w = x[0], b = x[1], S = i[w];
                l && S === a[w] || (e[b] = il(e, b, S || x[2]));
            }
            v += g / 2;
            var u = i.textStrokeWidth, d = l ? a.textStrokeWidth : null, m = !l || u !== d, d = !l || m || i.textStroke !== a.textStroke, M = ce(i.textStroke, u), T = de(i.textFill);
            if (M && (m && (e.lineWidth = u), d && (e.strokeStyle = M)), T && (l && i.textFill === a.textFill || (e.fillStyle = T)), 
            1 === p.length) M && e.strokeText(p[0], y, v), T && e.fillText(p[0], y, v); else for (_ = 0; _ < p.length; _++) M && e.strokeText(p[_], y, v), 
            T && e.fillText(p[_], y, v), v += g;
        })(t, e, n, i, o, r);
    }
    function oe(t, e, n, i, o) {
        var r;
        n && e.textRotation && ("center" === (r = e.textOrigin) ? (i = n.width / 2 + n.x, 
        o = n.height / 2 + n.y) : r && (i = r[0] + n.x, o = r[1] + n.y), t.translate(i, o), 
        t.rotate(-e.textRotation), t.translate(-i, -o));
    }
    function re(t, e, n, i, o, r, a, s) {
        var l = i.rich[n.styleName] || {};
        l.text = n.text;
        var h = n.textVerticalAlign, u = r + o / 2;
        "top" === h ? u = r + n.height / 2 : "bottom" === h && (u = r + o - n.height / 2), 
        !n.isLineHolder && ae(l) && se(t, e, l, "right" === s ? a - n.width : "center" === s ? a - n.width / 2 : a, u - n.height / 2, n.width, n.height), 
        (t = n.textPadding) && (a = pe(a, s, t), u -= n.height / 2 - t[2] - n.textHeight / 2), 
        ue(e, "shadowBlur", A(l.textShadowBlur, i.textShadowBlur, 0)), ue(e, "shadowColor", l.textShadowColor || i.textShadowColor || "transparent"), 
        ue(e, "shadowOffsetX", A(l.textShadowOffsetX, i.textShadowOffsetX, 0)), ue(e, "shadowOffsetY", A(l.textShadowOffsetY, i.textShadowOffsetY, 0)), 
        ue(e, "textAlign", s), ue(e, "textBaseline", "middle"), ue(e, "font", n.font || bl), 
        t = ce(l.textStroke || i.textStroke, void 0), s = de(l.textFill || i.textFill), 
        i = k(l.textStrokeWidth, i.textStrokeWidth), t && (ue(e, "lineWidth", i), ue(e, "strokeStyle", t), 
        e.strokeText(n.text, a, u)), s && (ue(e, "fillStyle", s), e.fillText(n.text, a, u));
    }
    function ae(t) {
        return !!(t.textBackgroundColor || t.textBorderWidth && t.textBorderColor);
    }
    function se(t, e, n, i, o, r, a) {
        var s, l, h = n.textBackgroundColor, u = n.textBorderWidth, c = n.textBorderColor, d = C(h);
        ue(e, "shadowBlur", n.textBoxShadowBlur || 0), ue(e, "shadowColor", n.textBoxShadowColor || "transparent"), 
        ue(e, "shadowOffsetX", n.textBoxShadowOffsetX || 0), ue(e, "shadowOffsetY", n.textBoxShadowOffsetY || 0), 
        (d || u && c) && (e.beginPath(), (s = n.textBorderRadius) ? te(e, {
            x: i,
            y: o,
            width: r,
            height: a,
            r: s
        }) : e.rect(i, o, r, a), e.closePath()), d ? (ue(e, "fillStyle", h), null != n.fillOpacity ? (l = e.globalAlpha, 
        e.globalAlpha = n.fillOpacity * n.opacity, e.fill(), e.globalAlpha = l) : e.fill()) : !D(h) || (d = Ft(h.image, null, t, le, h)) && Vt(d) && e.drawImage(d, i, o, r, a), 
        u && c && (ue(e, "lineWidth", u), ue(e, "strokeStyle", c), null != n.strokeOpacity ? (l = e.globalAlpha, 
        e.globalAlpha = n.strokeOpacity * n.opacity, e.stroke(), e.globalAlpha = l) : e.stroke());
    }
    function le(t, e) {
        e.image = t;
    }
    function he(t, e, n, i) {
        var o, r = n.x || 0, a = n.y || 0, s = n.textAlign, l = n.textVerticalAlign;
        return i && ((o = n.textPosition) instanceof Array ? (r = i.x + fe(o[0], i.width), 
        a = i.y + fe(o[1], i.height)) : (r = (i = e && e.calculateTextPosition ? e.calculateTextPosition(Il, n, i) : Yt(Il, n, i)).x, 
        a = i.y, s = s || i.textAlign, l = l || i.textVerticalAlign), (n = n.textOffset) && (r += n[0], 
        a += n[1])), (t = t || {}).baseX = r, t.baseY = a, t.textAlign = s, t.textVerticalAlign = l, 
        t;
    }
    function ue(t, e, n) {
        return t[e] = il(t, e, n), t[e];
    }
    function ce(t, e) {
        return null == t || e <= 0 || "transparent" === t || "none" === t ? null : t.image || t.colorStops ? "#000" : t;
    }
    function de(t) {
        return null == t || "none" === t ? null : t.image || t.colorStops ? "#000" : t;
    }
    function fe(t, e) {
        return "string" == typeof t ? 0 <= t.lastIndexOf("%") ? parseFloat(t) / 100 * e : parseFloat(t) : t;
    }
    function pe(t, e, n) {
        return "right" === e ? t - n[1] : "center" === e ? t + n[3] / 2 - n[1] / 2 : t + n[3];
    }
    function ge(t, e) {
        return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding);
    }
    function me(t) {
        for (var e in t = t || {}, Xs.call(this, t), t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
        this.style = new ll(t.style, this), this._rect = null, this.__clipPaths = null;
    }
    function ye(t) {
        me.call(this, t);
    }
    function ve(t) {
        return parseInt(t, 10);
    }
    function _e(t) {
        return "mousewheel" === t && ts.browser.firefox ? "DOMMouseScroll" : t;
    }
    function xe(t) {
        t._touching = !0, clearTimeout(t._touchTimer), t._touchTimer = setTimeout(function() {
            t._touching = !1;
        }, 700);
    }
    function we(t) {
        return "pen" === (t = t.pointerType) || "touch" === t;
    }
    function be(o) {
        function t(t, i) {
            I(t, function(t) {
                var e = o, n = _e(t);
                t = i._handlers[t], vs ? e.addEventListener(n, t) : e.attachEvent("on" + n, t);
            }, i);
        }
        var i;
        gs.call(this), this.dom = o, this._touching = !1, this._touchTimer, this._handlers = {}, 
        i = this, I(El, function(t) {
            i._handlers[t] = v(Rl[t], i);
        }), I(zl, function(t) {
            i._handlers[t] = v(Rl[t], i);
        }), I(Ll, function(t) {
            var e, n;
            i._handlers[t] = (e = Rl[t], n = i, function() {
                return n._touching ? void 0 : e.apply(n, arguments);
            });
        }), ts.pointerEventsSupported ? t(zl, this) : (ts.touchEventsSupported && t(El, this), 
        t(Ll, this));
    }
    function Se(t, e) {
        return new Hl(Ja(), t, e);
    }
    function Me(t) {
        return t instanceof Array ? t : null == t ? [] : [ t ];
    }
    function Te(t, e, n) {
        if (t) {
            t[e] = t[e] || {}, t.emphasis = t.emphasis || {}, t.emphasis[e] = t.emphasis[e] || {};
            for (var i = 0, o = n.length; i < o; i++) {
                var r = n[i];
                !t.emphasis[e].hasOwnProperty(r) && t[e].hasOwnProperty(r) && (t.emphasis[e][r] = t[e][r]);
            }
        }
    }
    function Ie(t) {
        return !Wl(t) || Gl(t) || t instanceof Date ? t : t.value;
    }
    function Ce(t, o) {
        o = (o || []).slice();
        var r = b(t || [], function(t) {
            return {
                exist: t
            };
        });
        return Vl(o, function(t, e) {
            if (Wl(t)) {
                for (var n = 0; n < r.length; n++) if (!r[n].option && null != t.id && r[n].exist.id === t.id + "") return r[n].option = t, 
                void (o[e] = null);
                for (n = 0; n < r.length; n++) {
                    var i = r[n].exist;
                    if (!(r[n].option || null != i.id && null != t.id || null == t.name || ke(t) || ke(i) || i.name !== t.name + "")) return r[n].option = t, 
                    void (o[e] = null);
                }
            }
        }), Vl(o, function(t) {
            if (Wl(t)) {
                for (var e = 0; e < r.length; e++) {
                    var n = r[e].exist;
                    if (!r[e].option && !ke(n) && null == t.id) {
                        r[e].option = t;
                        break;
                    }
                }
                e >= r.length && r.push({
                    option: t
                });
            }
        }), r;
    }
    function De(t) {
        return (t = t.name) && t.indexOf(Xl);
    }
    function ke(t) {
        return Wl(t) && t.id && 0 === (t.id + "").indexOf("\0_ec_\0");
    }
    function Ae(e, t) {
        return null != t.dataIndexInside ? t.dataIndexInside : null != t.dataIndex ? x(t.dataIndex) ? b(t.dataIndex, function(t) {
            return e.indexOfRawIndex(t);
        }) : e.indexOfRawIndex(t.dataIndex) : null != t.name ? x(t.name) ? b(t.name, function(t) {
            return e.indexOfName(t);
        }) : e.indexOfName(t.name) : void 0;
    }
    function Pe() {
        var e = "__\0ec_inner_" + Yl++ + "_" + Math.random().toFixed(5);
        return function(t) {
            return t[e] || (t[e] = {});
        };
    }
    function Oe(r, a, s) {
        C(a) && ((t = {})[a + "Index"] = 0, a = t);
        var t = s && s.defaultMainType;
        !t || Le(a, t + "Index") || Le(a, t + "Id") || Le(a, t + "Name") || (a[t + "Index"] = 0);
        var l = {};
        return Vl(a, function(t, e) {
            var n, i, o, t = a[e];
            "dataIndex" !== e && "dataIndexInside" !== e ? (n = (o = e.match(/^(\w+)(Index|Id|Name)$/) || [])[1], 
            i = (o[2] || "").toLowerCase(), !n || !i || null == t || "index" === i && "none" === t || s && s.includeMainTypes && m(s.includeMainTypes, n) < 0 || (o = {
                mainType: n
            }, "index" === i && "all" === t || (o[i] = t), o = r.queryComponents(o), l[n + "Models"] = o, 
            l[n + "Model"] = o[0])) : l[e] = t;
        }), l;
    }
    function Le(t, e) {
        return t && t.hasOwnProperty(e);
    }
    function Ee(t, e, n) {
        t.setAttribute ? t.setAttribute(e, n) : t[e] = n;
    }
    function Be(t) {
        return "auto" === t ? ts.domSupported ? "html" : "richText" : t || "html";
    }
    function ze(t) {
        var e = {
            main: "",
            sub: ""
        };
        return t && (t = t.split(ql), e.main = t[0] || "", e.sub = t[1] || ""), e;
    }
    function Re(t, i) {
        (t.$constructor = t).extend = function(e) {
            function t() {
                (e.$constructor || n).apply(this, arguments);
            }
            $a && I(i, function(t) {
                e[t] || console.warn("Method `" + t + "` should be implemented" + (e.type ? " in " + e.type : "") + ".");
            });
            var n = this;
            return M(t.prototype, e), t.extend = this.extend, t.superCall = Fe, t.superApply = He, 
            r(t, this), t.superClass = n, t;
        };
    }
    function Ne(t) {
        var e = [ "__\0is_clz", Zl++, Math.random().toFixed(3) ].join("_");
        t.prototype[e] = !0, $a && w(!t.isInstance, 'The method "is" can not be defined.'), 
        t.isInstance = function(t) {
            return !(!t || !t[e]);
        };
    }
    function Fe(t, e) {
        var n = i(arguments, 2);
        return this.superClass.prototype[e].apply(t, n);
    }
    function He(t, e, n) {
        return this.superClass.prototype[e].apply(t, n);
    }
    function Ve(n, t) {
        t = t || {};
        var i, o = {};
        return n.registerClass = function(t, e) {
            var n;
            return e && (w(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(n = e), 'componentType "' + n + '" illegal'), 
            (e = ze(e)).sub ? e.sub !== jl && ((n = o[e.main]) && n[jl] || ((n = o[e.main] = {})[jl] = !0), 
            n[e.sub] = t) : ($a && o[e.main] && console.warn(e.main + " exists."), o[e.main] = t)), 
            t;
        }, n.getClass = function(t, e, n) {
            var i = o[t];
            if (i && i[jl] && (i = e ? i[e] : null), n && !i) throw new Error(e ? "Component " + t + "." + (e || "") + " not exists. Load it first." : t + ".type should be specified.");
            return i;
        }, n.getClassesByMainType = function(t) {
            t = ze(t);
            var n = [];
            return (t = o[t.main]) && t[jl] ? I(t, function(t, e) {
                e !== jl && n.push(t);
            }) : n.push(t), n;
        }, n.hasClass = function(t) {
            return t = ze(t), !!o[t.main];
        }, n.getAllClassMainTypes = function() {
            var n = [];
            return I(o, function(t, e) {
                n.push(e);
            }), n;
        }, n.hasSubTypes = function(t) {
            return t = ze(t), (t = o[t.main]) && t[jl];
        }, n.parseClassType = ze, t.registerWhenExtend && (i = n.extend) && (n.extend = function(t) {
            var e = i.call(this, t);
            return n.registerClass(e, t.type);
        }), n;
    }
    function We(t) {
        return -nh < t && t < nh;
    }
    function Ge(t) {
        return nh < t || t < -nh;
    }
    function Xe(t, e, n, i, o) {
        var r = 1 - o;
        return r * r * (r * t + 3 * o * e) + o * o * (o * i + 3 * r * n);
    }
    function Ue(t, e, n, i, o) {
        var r = 1 - o;
        return 3 * (((e - t) * r + 2 * (n - e) * o) * r + (i - n) * o * o);
    }
    function Ye(t, e, n, i, o) {
        var r, a = 6 * n - 12 * e + 6 * t, i = 9 * e + 3 * i - 3 * t - 9 * n, n = 3 * e - 3 * t, e = 0;
        return We(i) ? Ge(a) && 0 <= (r = -n / a) && r <= 1 && (o[e++] = r) : We(t = a * a - 4 * i * n) ? o[0] = -a / (2 * i) : 0 < t && (t = (-a - (n = eh(t))) / (2 * i), 
        0 <= (r = (-a + n) / (2 * i)) && r <= 1 && (o[e++] = r), 0 <= t && t <= 1 && (o[e++] = t)), 
        e;
    }
    function qe(t, e, n, i, o, r) {
        var a = (e - t) * o + t, s = (n - e) * o + e, e = (i - n) * o + n, n = (s - a) * o + a, o = ((s = (e - s) * o + s) - n) * o + n;
        r[0] = t, r[1] = a, r[2] = n, r[3] = o, r[4] = o, r[5] = s, r[6] = e, r[7] = i;
    }
    function je(t, e, n, i) {
        var o = 1 - i;
        return o * (o * t + 2 * i * e) + i * i * n;
    }
    function Ze(t, e, n, i) {
        return 2 * ((1 - i) * (e - t) + i * (n - e));
    }
    function Ke(t, e, n) {
        return 0 == (n = t + n - 2 * e) ? .5 : (t - e) / n;
    }
    function $e(t, e, n, i, o) {
        var r = (e - t) * i + t, i = ((e = (n - e) * i + e) - r) * i + r;
        o[0] = t, o[1] = r, o[2] = i, o[3] = i, o[4] = e, o[5] = n;
    }
    function Qe(t, e, n, i, o, r) {
        o[0] = hh(t, n), o[1] = hh(e, i), r[0] = uh(t, n), r[1] = uh(e, i);
    }
    function Je(t, e, n, i, o, r, a) {
        if (0 !== o) {
            var s = o, o = 0;
            return e + s < a && i + s < a || a < e - s && a < i - s || t + s < r && n + s < r || r < t - s && r < n - s ? void 0 : t === n ? Math.abs(r - t) <= s / 2 : (n = (o = (e - i) / (t - n)) * r - a + (t * i - n * e) / (t - n)) * n / (o * o + 1) <= s / 2 * s / 2;
        }
    }
    function tn(t) {
        return (t %= Oh) < 0 && (t += Oh), t;
    }
    function en(t, e, n, i, o, r) {
        if (e < r && i < r || r < e && r < i) return 0;
        if (i === e) return 0;
        var a = i < e ? 1 : -1;
        return 1 != (r = (r - e) / (i - e)) && 0 != r || (a = i < e ? .5 : -.5), (t = r * (n - t) + t) === o ? 1 / 0 : o < t ? a : 0;
    }
    function nn(t, e, n, i, o) {
        for (var r, a, s, l, h, u, c, g, d, f, p, y, m = 0, v = 0, _ = 0, x = 0, w = 0, b = 0; b < t.length; ) {
            var S = t[b++];
            switch (S === Eh.M && 1 < b && (n || (m += en(v, _, x, w, i, o))), 1 === b && (x = v = t[b], 
            w = _ = t[b + 1]), S) {
              case Eh.M:
                v = x = t[b++], _ = w = t[b++];
                break;

              case Eh.L:
                if (n) {
                    if (Je(v, _, t[b], t[b + 1], e, i, o)) return !0;
                } else m += en(v, _, t[b], t[b + 1], i, o) || 0;
                v = t[b++], _ = t[b++];
                break;

              case Eh.C:
                if (n) {
                    if (f = v, p = _, M = t[b++], T = t[b++], I = t[b++], C = t[b++], D = t[b], k = t[b + 1], 
                    y = i, A = o, 0 !== (L = e) && (!(p + L < A && T + L < A && C + L < A && k + L < A || A < p - L && A < T - L && A < C - L && A < k - L || f + L < y && M + L < y && I + L < y && D + L < y || y < f - L && y < M - L && y < I - L && y < D - L) && function(t, e, n, i, o, r, a, s, l) {
                        var h, u, c, d, f = .005, p = 1 / 0;
                        ah[0] = y, ah[1] = l;
                        for (var g = 0; g < 1; g += .05) sh[0] = Xe(t, n, o, a, g), sh[1] = Xe(e, i, r, s, g), 
                        (c = fs(ah, sh)) < p && (h = g, p = c);
                        p = 1 / 0;
                        for (var m = 0; m < 32 && !(f < ih); m++) d = h - f, u = h + f, sh[0] = Xe(t, n, o, a, d), 
                        sh[1] = Xe(e, i, r, s, d), c = fs(sh, ah), 0 <= d && c < p ? (h = d, p = c) : (lh[0] = Xe(t, n, o, a, u), 
                        lh[1] = Xe(e, i, r, s, u), d = fs(lh, ah), u <= 1 && d < p ? (h = u, p = d) : f *= .5);
                        return eh(p);
                    }(f, p, M, T, I, C, D, k, A) <= L / 2)) return !0;
                } else m += function(t, e, n, i, o, r, a, s, l, h) {
                    if (e < h && i < h && r < h && s < h || h < e && h < i && h < r && h < s) return 0;
                    var u, c, d, f, p, g, m, y, v, _, x = (p = zh, v = (f = s) + 3 * ((c = i) - (d = r)) - (u = e), 
                    u = (_ = 3 * (d - 2 * c + u)) * (f = 3 * (c - u)) - 9 * v * (d = u - h), h = f * f - 3 * _ * d, 
                    d = 0, We(c = _ * _ - 3 * v * f) && We(u) ? We(_) ? p[0] = 0 : 0 <= (m = -f / _) && m <= 1 && (p[d++] = m) : We(f = u * u - 4 * c * h) ? (y = -(h = u / c) / 2, 
                    0 <= (m = -_ / v + h) && m <= 1 && (p[d++] = m), 0 <= y && y <= 1 && (p[d++] = y)) : 0 < f ? (g = c * _ + 1.5 * v * (-u - (f = eh(f))), 
                    0 <= (m = (-_ - ((f = (f = c * _ + 1.5 * v * (-u + f)) < 0 ? -th(-f, rh) : th(f, rh)) + (g = g < 0 ? -th(-g, rh) : th(g, rh)))) / (3 * v)) && m <= 1 && (p[d++] = m)) : (g = (2 * c * _ - 3 * v * u) / (2 * eh(c * c * c)), 
                    u = Math.acos(g) / 3, m = (-_ - 2 * (g = eh(c)) * (c = Math.cos(u))) / (3 * v), 
                    y = (-_ + g * (c + oh * Math.sin(u))) / (3 * v), v = (-_ + g * (c - oh * Math.sin(u))) / (3 * v), 
                    0 <= m && m <= 1 && (p[d++] = m), 0 <= y && y <= 1 && (p[d++] = y), 0 <= v && v <= 1 && (p[d++] = v)), 
                    d);
                    if (0 === x) return 0;
                    for (var w, b, S = 0, M = -1, T = 0; T < x; T++) {
                        var I = zh[T], C = 0 === I || 1 === I ? .5 : 1;
                        Xe(t, n, o, a, I) < l || (M < 0 && (M = Ye(e, i, r, s, Rh), Rh[1] < Rh[0] && 1 < M && (b = void 0, 
                        b = Rh[0], Rh[0] = Rh[1], Rh[1] = b), b = Xe(e, i, r, s, Rh[0]), 1 < M && (w = Xe(e, i, r, s, Rh[1]))), 
                        S += 2 === M ? I < Rh[0] ? b < e ? C : -C : I < Rh[1] ? w < b ? C : -C : s < w ? C : -C : I < Rh[0] ? b < e ? C : -C : s < b ? C : -C);
                    }
                    return S;
                }(v, _, t[b++], t[b++], t[b++], t[b++], t[b], t[b + 1], i, o) || 0;
                v = t[b++], _ = t[b++];
                break;

              case Eh.Q:
                if (n) {
                    if (r = v, a = _, s = t[b++], l = t[b++], h = t[b], u = t[b + 1], g = i, d = o, 
                    0 !== (c = e) && (!(a + c < d && l + c < d && u + c < d || d < a - c && d < l - c && d < u - c || r + c < g && s + c < g && h + c < g || g < r - c && g < s - c && g < h - c) && function(t, e, n, i, o, r, a) {
                        var s, l = .005, h = 1 / 0;
                        ah[0] = g, ah[1] = a;
                        for (var u = 0; u < 1; u += .05) sh[0] = je(t, n, o, u), sh[1] = je(e, i, r, u), 
                        (p = fs(ah, sh)) < h && (s = u, h = p);
                        h = 1 / 0;
                        for (var c = 0; c < 32 && !(l < ih); c++) {
                            var d = s - l, f = s + l;
                            sh[0] = je(t, n, o, d), sh[1] = je(e, i, r, d);
                            var p = fs(sh, ah);
                            0 <= d && p < h ? (s = d, h = p) : (lh[0] = je(t, n, o, f), lh[1] = je(e, i, r, f), 
                            d = fs(lh, ah), f <= 1 && d < h ? (s = f, h = d) : l *= .5);
                        }
                        return eh(h);
                    }(r, a, s, l, h, u, d) <= c / 2)) return !0;
                } else m += function(t, e, n, i, o, r, a, s) {
                    if (e < s && i < s && r < s || s < e && s < i && s < r) return 0;
                    var l, h, u, c, d, f, p = (c = zh, f = (l = e) - 2 * (h = i) + r, u = 2 * (h - l), 
                    h = l - s, l = 0, We(f) ? Ge(u) && 0 <= (d = -h / u) && d <= 1 && (c[l++] = d) : We(s = u * u - 4 * f * h) ? 0 <= (d = -u / (2 * f)) && d <= 1 && (c[l++] = d) : 0 < s && (s = (-u - (h = eh(s))) / (2 * f), 
                    0 <= (d = (-u + h) / (2 * f)) && d <= 1 && (c[l++] = d), 0 <= s && s <= 1 && (c[l++] = s)), 
                    l);
                    if (0 === p) return 0;
                    var g = Ke(e, i, r);
                    if (0 <= g && g <= 1) {
                        for (var m = 0, y = je(e, i, r, g), v = 0; v < p; v++) {
                            var _ = 0 === zh[v] || 1 === zh[v] ? .5 : 1;
                            je(t, n, o, zh[v]) < a || (m += zh[v] < g ? y < e ? _ : -_ : r < y ? _ : -_);
                        }
                        return m;
                    }
                    return _ = 0 === zh[0] || 1 === zh[0] ? .5 : 1, je(t, n, o, zh[0]) < a ? 0 : r < e ? _ : -_;
                }(v, _, t[b++], t[b++], t[b], t[b + 1], i, o) || 0;
                v = t[b++], _ = t[b++];
                break;

              case Eh.A:
                var M = t[b++], T = t[b++], I = t[b++], C = t[b++], D = t[b++], k = t[b++];
                b += 1;
                var A = 1 - t[b++], P = Math.cos(D) * I + M, O = Math.sin(D) * C + T;
                1 < b ? m += en(v, _, P, O, i, o) : (x = P, w = O);
                var L = (i - M) * C / I + M;
                if (n) {
                    if (r = T, a = C, l = (s = D) + k, h = A, u = L, d = o, 0 !== (c = e) && (u -= M, 
                    d -= r, a < (r = Math.sqrt(u * u + d * d)) - c || r + c < a ? void 0 : Math.abs(s - l) % Lh < 1e-4 || ((l = h ? (h = s, 
                    s = tn(l), tn(h)) : (s = tn(s), tn(l))) < s && (l += Lh), (u = Math.atan2(d, u)) < 0 && (u += Lh), 
                    s <= u && u <= l || s <= u + Lh && u + Lh <= l))) return !0;
                } else m += function(t, e, n, i, o, r, a, s) {
                    if (n < (s -= e) || s < -n) return 0;
                    if (e = Math.sqrt(n * n - s * s), zh[0] = -e, zh[1] = e, (n = Math.abs(i - o)) < 1e-4) return 0;
                    if (n % Bh < 1e-4) {
                        o = Bh;
                        var l = r ? 1 : -1;
                        return a >= zh[i = 0] + t && a <= zh[1] + t ? l : 0;
                    }
                    (o = r ? (e = i, i = tn(o), tn(e)) : (i = tn(i), tn(o))) < i && (o += Bh);
                    for (var h = 0, u = 0; u < 2; u++) {
                        var c = zh[u];
                        a < c + t && (l = r ? 1 : -1, (c = Math.atan2(s, c)) < 0 && (c = Bh + c), (i <= c && c <= o || i <= c + Bh && c + Bh <= o) && (c > Math.PI / 2 && c < 1.5 * Math.PI && (l = -l), 
                        h += l));
                    }
                    return h;
                }(M, T, C, D, D + k, A, L, o);
                v = Math.cos(D + k) * I + M, _ = Math.sin(D + k) * C + T;
                break;

              case Eh.R:
                if (x = v = t[b++], w = _ = t[b++], P = x + t[b++], O = w + t[b++], n) {
                    if (Je(x, w, P, w, e, i, o) || Je(P, w, P, O, e, i, o) || Je(P, O, x, O, e, i, o) || Je(x, O, x, w, e, i, o)) return !0;
                } else m += en(P, w, P, O, i, o), m += en(x, O, x, w, i, o);
                break;

              case Eh.Z:
                if (n) {
                    if (Je(v, _, x, w, e, i, o)) return !0;
                } else m += en(v, _, x, w, i, o);
                v = x, _ = w;
            }
        }
        return n || Math.abs(_ - w) < 1e-4 || (m += en(v, _, x, w, i, o) || 0), 0 !== m;
    }
    function on(t) {
        me.call(this, t), this.path = null;
    }
    function rn(t, e, n, i, o, r, a, s, l, h, u) {
        var c = l * ($h / 180), d = Kh(c) * (t - n) / 2 + Zh(c) * (e - i) / 2, f = -1 * Zh(c) * (t - n) / 2 + Kh(c) * (e - i) / 2;
        1 < (l = d * d / (a * a) + f * f / (s * s)) && (a *= jh(l), s *= jh(l)), o = (l = (o === r ? -1 : 1) * jh((a * a * s * s - a * a * f * f - s * s * d * d) / (a * a * f * f + s * s * d * d)) || 0) * a * f / s, 
        l = l * -s * d / a, t = (t + n) / 2 + Kh(c) * o - Zh(c) * l, n = (e + i) / 2 + Zh(c) * o + Kh(c) * l, 
        e = Jh([ 1, 0 ], [ (d - o) / a, (f - l) / s ]), l = Jh(i = [ (d - o) / a, (f - l) / s ], f = [ (-1 * d - o) / a, (-1 * f - l) / s ]), 
        Qh(i, f) <= -1 && (l = $h), 1 <= Qh(i, f) && (l = 0), 0 === r && 0 < l && (l -= 2 * $h), 
        1 === r && l < 0 && (l += 2 * $h), u.addData(h, t, n, a, s, e, l, c, r);
    }
    function an(t, e) {
        var n = function(t) {
            if (!t) return new Ph();
            for (var e, n = 0, i = 0, o = n, r = i, a = new Ph(), s = Ph.CMD, l = t.match(tu), h = 0; h < l.length; h++) {
                for (var u, c = l[h], d = c.charAt(0), f = c.match(eu) || [], p = f.length, g = 0; g < p; g++) f[g] = parseFloat(f[g]);
                for (var m = 0; m < p; ) {
                    var y, v, _, x, w, b, S, M = n, T = i;
                    switch (d) {
                      case "l":
                        n += f[m++], i += f[m++], u = s.L, a.addData(u, n, i);
                        break;

                      case "L":
                        n = f[m++], i = f[m++], u = s.L, a.addData(u, n, i);
                        break;

                      case "m":
                        n += f[m++], i += f[m++], u = s.M, a.addData(u, n, i), o = n, r = i, d = "l";
                        break;

                      case "M":
                        n = f[m++], i = f[m++], u = s.M, a.addData(u, n, i), o = n, r = i, d = "L";
                        break;

                      case "h":
                        n += f[m++], u = s.L, a.addData(u, n, i);
                        break;

                      case "H":
                        n = f[m++], u = s.L, a.addData(u, n, i);
                        break;

                      case "v":
                        i += f[m++], u = s.L, a.addData(u, n, i);
                        break;

                      case "V":
                        i = f[m++], u = s.L, a.addData(u, n, i);
                        break;

                      case "C":
                        u = s.C, a.addData(u, f[m++], f[m++], f[m++], f[m++], f[m++], f[m++]), n = f[m - 2], 
                        i = f[m - 1];
                        break;

                      case "c":
                        u = s.C, a.addData(u, f[m++] + n, f[m++] + i, f[m++] + n, f[m++] + i, f[m++] + n, f[m++] + i), 
                        n += f[m - 2], i += f[m - 1];
                        break;

                      case "S":
                        y = n, v = i;
                        var I = a.len(), C = a.data;
                        e === s.C && (y += n - C[I - 4], v += i - C[I - 3]), u = s.C, M = f[m++], T = f[m++], 
                        n = f[m++], i = f[m++], a.addData(u, y, v, M, T, n, i);
                        break;

                      case "s":
                        y = n, v = i, I = a.len(), C = a.data, e === s.C && (y += n - C[I - 4], v += i - C[I - 3]), 
                        u = s.C, M = n + f[m++], T = i + f[m++], n += f[m++], i += f[m++], a.addData(u, y, v, M, T, n, i);
                        break;

                      case "Q":
                        M = f[m++], T = f[m++], n = f[m++], i = f[m++], u = s.Q, a.addData(u, M, T, n, i);
                        break;

                      case "q":
                        M = f[m++] + n, T = f[m++] + i, n += f[m++], i += f[m++], u = s.Q, a.addData(u, M, T, n, i);
                        break;

                      case "T":
                        y = n, v = i, I = a.len(), C = a.data, e === s.Q && (y += n - C[I - 4], v += i - C[I - 3]), 
                        n = f[m++], i = f[m++], u = s.Q, a.addData(u, y, v, n, i);
                        break;

                      case "t":
                        y = n, v = i, I = a.len(), C = a.data, e === s.Q && (y += n - C[I - 4], v += i - C[I - 3]), 
                        n += f[m++], i += f[m++], u = s.Q, a.addData(u, y, v, n, i);
                        break;

                      case "A":
                        _ = f[m++], x = f[m++], w = f[m++], b = f[m++], S = f[m++], rn(M = n, T = i, n = f[m++], i = f[m++], b, S, _, x, w, u = s.A, a);
                        break;

                      case "a":
                        _ = f[m++], x = f[m++], w = f[m++], b = f[m++], S = f[m++], rn(M = n, T = i, n += f[m++], i += f[m++], b, S, _, x, w, u = s.A, a);
                    }
                }
                "z" !== d && "Z" !== d || (u = s.Z, a.addData(u), n = o, i = r), e = u;
            }
            return a.toStatic(), a;
        }(t);
        return (e = e || {}).buildPath = function(t) {
            var e;
            t.setData ? (t.setData(n.data), (e = t.getContext()) && t.rebuildPath(e)) : (e = t, 
            n.rebuildPath(e));
        }, e.applyTransform = function(t) {
            qh(n, t), this.dirty(!0);
        }, e;
    }
    function sn(t, e, n, i, o, r, a) {
        return (2 * (e - n) + (t = .5 * (n - t)) + (i = .5 * (i - e))) * a + (-3 * (e - n) - 2 * t - i) * r + t * o + e;
    }
    function ln(t, e, n) {
        var i = e.points, o = e.smooth;
        if (i && 2 <= i.length) {
            if (o && "spline" !== o) {
                var r = function(t, e, n, i) {
                    var o, r, a, s, l = [], h = [], u = [], c = [];
                    if (i) {
                        a = [ 1 / 0, 1 / 0 ], s = [ -1 / 0, -1 / 0 ];
                        for (var d = 0, f = t.length; d < f; d++) V(a, a, t[d]), W(s, s, t[d]);
                        V(a, a, i[0]), W(s, s, i[1]);
                    }
                    for (d = 0, f = t.length; d < f; d++) {
                        var p = t[d];
                        if (n) o = t[d ? d - 1 : f - 1], r = t[(d + 1) % f]; else {
                            if (0 === d || d === f - 1) {
                                l.push(B(t[d]));
                                continue;
                            }
                            o = t[d - 1], r = t[d + 1];
                        }
                        R(h, r, o), N(h, h, e);
                        var g = F(p, o), m = F(p, r), y = g + m;
                        0 !== y && (g /= y, m /= y), N(u, h, -g), N(c, h, m), m = z([], p, u), p = z([], p, c), 
                        i && (W(m, m, a), V(m, m, s), W(p, p, a), V(p, p, s)), l.push(m), l.push(p);
                    }
                    return n && l.push(l.shift()), l;
                }(i, o, n, e.smoothConstraint);
                t.moveTo(i[0][0], i[0][1]);
                for (var a = i.length, s = 0; s < (n ? a : a - 1); s++) {
                    var l = r[2 * s], h = r[2 * s + 1], u = i[(s + 1) % a];
                    t.bezierCurveTo(l[0], l[1], h[0], h[1], u[0], u[1]);
                }
            } else {
                "spline" === o && (i = function(t, e) {
                    for (var n = t.length, i = [], o = 0, r = 1; r < n; r++) o += F(t[r - 1], t[r]);
                    for (var a = (a = o / 2) < n ? n : a, r = 0; r < a; r++) {
                        var s, l, h = r / (a - 1) * (e ? n : n - 1), u = Math.floor(h), c = h - u, d = t[u % n], f = e ? (s = t[(u - 1 + n) % n], 
                        l = t[(u + 1) % n], t[(u + 2) % n]) : (s = t[0 === u ? u : u - 1], l = t[n - 2 < u ? n - 1 : u + 1], 
                        t[n - 3 < u ? n - 1 : u + 2]), u = c * (h = c * c);
                        i.push([ sn(s[0], d[0], l[0], f[0], c, h, u), sn(s[1], d[1], l[1], f[1], c, h, u) ]);
                    }
                    return i;
                }(i, n)), t.moveTo(i[0][0], i[0][1]);
                for (var s = 1, c = i.length; s < c; s++) t.lineTo(i[s][0], i[s][1]);
            }
            n && t.closePath();
        }
    }
    function hn(t, e, n) {
        var i, o, r = n && n.lineWidth;
        e && r && (i = e.x1, o = e.x2, n = e.y1, e = e.y2, hu(2 * i) === hu(2 * o) ? t.x1 = t.x2 = cn(i, r, !0) : (t.x1 = i, 
        t.x2 = o), hu(2 * n) === hu(2 * e) ? t.y1 = t.y2 = cn(n, r, !0) : (t.y1 = n, t.y2 = e));
    }
    function un(t, e, n) {
        var i, o, r = n && n.lineWidth;
        e && r && (i = e.x, o = e.y, n = e.width, e = e.height, t.x = cn(i, r, !0), t.y = cn(o, r, !0), 
        t.width = Math.max(cn(i + n, r, !1) - t.x, 0 === n ? 0 : 1), t.height = Math.max(cn(o + e, r, !1) - t.y, 0 === e ? 0 : 1));
    }
    function cn(t, e, n) {
        return ((t = hu(2 * t)) + hu(e)) % 2 == 0 ? t / 2 : (t + (n ? 1 : -1)) / 2;
    }
    function dn(t, e, n) {
        var i = t.cpx2, o = t.cpy2;
        return null === i || null === o ? [ (n ? Ue : Xe)(t.x1, t.cpx1, t.cpx2, t.x2, e), (n ? Ue : Xe)(t.y1, t.cpy1, t.cpy2, t.y2, e) ] : [ (n ? Ze : je)(t.x1, t.cpx1, t.x2, e), (n ? Ze : je)(t.y1, t.cpy1, t.y2, e) ];
    }
    function fn(t) {
        me.call(this, t), this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, 
        this.notClear = !0;
    }
    function pn(t) {
        return on.extend(t);
    }
    function gn(t, e, n, i) {
        return e = new on(an(t, e)), n && ("center" === i && (n = yn(n, e.getBoundingRect())), 
        vn(e, n)), e;
    }
    function mn(t, e, n) {
        var i = new ye({
            style: {
                image: t,
                x: e.x,
                y: e.y,
                width: e.width,
                height: e.height
            },
            onload: function(t) {
                "center" === n && (t = {
                    width: t.width,
                    height: t.height
                }, i.setStyle(yn(e, t)));
            }
        });
        return i;
    }
    function yn(t, e) {
        var n = e.width / e.height, n = (e = t.height * n) <= t.width ? t.height : (e = t.width) / n;
        return {
            x: t.x + t.width / 2 - e / 2,
            y: t.y + t.height / 2 - n / 2,
            width: e,
            height: n
        };
    }
    function vn(t, e) {
        t.applyTransform && (e = t.getBoundingRect().calculateTransform(e), t.applyTransform(e));
    }
    function _n(t) {
        return null != t && "none" !== t;
    }
    function xn(t) {
        var e, n, i, o, r = t.__hoverStl;
        r && !t.__highlighted && (e = t.useHoverLayer, t.__highlighted = e ? "layer" : "plain", 
        n = t.__zr, t.isGroup || !n && e || (o = (i = t).style, e && (o = (i = n.addHover(t)).style), 
        Hn(o), e || function(t) {
            if (t.__hoverStlDirty) {
                t.__hoverStlDirty = !1;
                var e = t.__hoverStl;
                if (!e) return t.__cachedNormalStl = t.__cachedNormalZ2 = null;
                var n = t.__cachedNormalStl = {};
                t.__cachedNormalZ2 = t.z2;
                var i, o = t.style;
                for (i in e) null != e[i] && (n[i] = o[i]);
                n.fill = o.fill, n.stroke = o.stroke;
            }
        }(i), o.extendFrom(r), wn(o, r, "fill"), wn(o, r, "stroke"), Fn(o), e || (t.dirty(!1), 
        t.z2 += Su)));
    }
    function wn(t, e, n) {
        !_n(e[n]) && _n(t[n]) && (t[n] = function(t) {
            if ("string" != typeof t) return t;
            var e = Au.get(t);
            return e || (e = function(t) {
                var e = gt(t);
                if (e) {
                    for (var n = 0; n < 3; n++) e[n] = 1.1 * e[n] | 0, 255 < e[n] ? e[n] = 255 : t[n] < 0 && (e[n] = 0);
                    return yt(e, 4 === e.length ? "rgba" : "rgb");
                }
            }(t), Pu < 1e4 && (Au.set(t, e), Pu++)), e;
        }(t[n]));
    }
    function bn(t) {
        var e, n = t.__highlighted;
        n && (t.__highlighted = !1, !t.isGroup) && ("layer" === n ? t.__zr && t.__zr.removeHover(t) : (e = t.style, 
        (n = t.__cachedNormalStl) && (Hn(e), t.setStyle(n), Fn(e)), null != (e = t.__cachedNormalZ2) && t.z2 - e === Su && (t.z2 = e)));
    }
    function Sn(t, e, n) {
        var i, o = Tu, r = Tu;
        t.__highlighted && (o = Mu, i = !0), e(t, n), t.__highlighted && (r = Mu, i = !0), 
        t.isGroup && t.traverse(function(t) {
            t.isGroup || e(t, n);
        }), i && t.__highDownOnUpdate && t.__highDownOnUpdate(o, r);
    }
    function Mn(t, e) {
        e = t.__hoverStl = !1 !== e && (t.hoverStyle || e || {}), t.__hoverStlDirty = !0, 
        t.__highlighted && (t.__cachedNormalStl = null, bn(t), xn(t));
    }
    function Tn(t) {
        kn(this, t) || this.__highByOuter || Sn(this, xn);
    }
    function In(t) {
        kn(this, t) || this.__highByOuter || Sn(this, bn);
    }
    function Cn(t) {
        this.__highByOuter |= 1 << (t || 0), Sn(this, xn);
    }
    function Dn(t) {
        (this.__highByOuter &= ~(1 << (t || 0))) || Sn(this, bn);
    }
    function kn(t, e) {
        return t.__highDownSilentOnTouch && e.zrByTouch;
    }
    function An(t, e) {
        Pn(t, !0), Sn(t, Mn, e);
    }
    function Pn(t, e) {
        var n = !1 === e;
        t.__highDownSilentOnTouch = t.highDownSilentOnTouch, t.__highDownOnUpdate = t.highDownOnUpdate, 
        n && !t.__highDownDispatcher || (t[e = n ? "off" : "on"]("mouseover", Tn)[e]("mouseout", In), 
        t[e]("emphasis", Cn)[e]("normal", Dn), t.__highByOuter = t.__highByOuter || 0, t.__highDownDispatcher = !n);
    }
    function On(t) {
        return !(!t || !t.__highDownDispatcher);
    }
    function Ln(t) {
        var e = Cu[t];
        return null == e && Iu <= 32 && (e = Cu[t] = Iu++), e;
    }
    function En(t, e, n, i, o, r, a) {
        var s = (o = o || bu).labelFetcher, l = o.labelDataIndex, h = o.labelDimIndex, u = n.getShallow("show"), c = i.getShallow("show");
        (u || c) && (s && (d = s.getFormattedLabel(l, "normal", null, h)), null == d && (d = f(o.defaultText) ? o.defaultText(l, o) : o.defaultText));
        var u = u ? d : null, d = c ? k(s ? s.getFormattedLabel(l, "emphasis", null, h) : null, d) : null;
        null == u && null == d || (Bn(t, n, r, o), Bn(e, i, a, o, !0)), t.text = u, e.text = d;
    }
    function Bn(t, e, n, i, o) {
        return zn(t, e, i, o), n && M(t, n), t;
    }
    function zn(t, e, n, i) {
        (n = n || bu).isRectText && ("outside" === (a = e.getShallow("position") || (i ? null : "inside")) && (a = "top"), 
        t.textPosition = a, t.textOffset = e.getShallow("offset"), null != (a = e.getShallow("rotate")) && (a *= Math.PI / 180), 
        t.textRotation = a, t.textDistance = k(e.getShallow("distance"), i ? null : 5));
        var o, r, a = e.ecModel, s = a && a.option.textStyle, l = function(t) {
            for (var e; t && t !== t.ecModel; ) {
                var n = (t.option || bu).rich;
                if (n) for (var i in e = e || {}, n) n.hasOwnProperty(i) && (e[i] = 1);
                t = t.parentModel;
            }
            return e;
        }(e);
        if (l) for (var h in o = {}, l) l.hasOwnProperty(h) && (r = e.getModel([ "rich", h ]), 
        Rn(o[h] = {}, r, s, n, i));
        return t.rich = o, Rn(t, e, s, n, i, !0), n.forceRich && !n.textStyle && (n.textStyle = {}), 
        t;
    }
    function Rn(t, e, n, i, o, r) {
        n = !o && n || bu, t.textFill = Nn(e.getShallow("color"), i) || n.color, t.textStroke = Nn(e.getShallow("textBorderColor"), i) || n.textBorderColor, 
        t.textStrokeWidth = k(e.getShallow("textBorderWidth"), n.textBorderWidth), o || (r && (t.insideRollbackOpt = i, 
        Fn(t)), null == t.textFill && (t.textFill = i.autoColor)), t.fontStyle = e.getShallow("fontStyle") || n.fontStyle, 
        t.fontWeight = e.getShallow("fontWeight") || n.fontWeight, t.fontSize = e.getShallow("fontSize") || n.fontSize, 
        t.fontFamily = e.getShallow("fontFamily") || n.fontFamily, t.textAlign = e.getShallow("align"), 
        t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"), 
        t.textLineHeight = e.getShallow("lineHeight"), t.textWidth = e.getShallow("width"), 
        t.textHeight = e.getShallow("height"), t.textTag = e.getShallow("tag"), r && i.disableBox || (t.textBackgroundColor = Nn(e.getShallow("backgroundColor"), i), 
        t.textPadding = e.getShallow("padding"), t.textBorderColor = Nn(e.getShallow("borderColor"), i), 
        t.textBorderWidth = e.getShallow("borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), 
        t.textBoxShadowColor = e.getShallow("shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), 
        t.textBoxShadowOffsetX = e.getShallow("shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")), 
        t.textShadowColor = e.getShallow("textShadowColor") || n.textShadowColor, t.textShadowBlur = e.getShallow("textShadowBlur") || n.textShadowBlur, 
        t.textShadowOffsetX = e.getShallow("textShadowOffsetX") || n.textShadowOffsetX, 
        t.textShadowOffsetY = e.getShallow("textShadowOffsetY") || n.textShadowOffsetY;
    }
    function Nn(t, e) {
        return "auto" !== t ? t : e && e.autoColor ? e.autoColor : null;
    }
    function Fn(t) {
        var e, n, i, o = t.textPosition, r = t.insideRollbackOpt;
        r && null == t.textFill && (n = r.autoColor, i = r.isRectText, o = !(i = !1 !== (r = r.useInsideStyle) && (!0 === r || i && o && "string" == typeof o && 0 <= o.indexOf("inside"))) && null != n, 
        (i || o) && (e = {
            textFill: t.textFill,
            textStroke: t.textStroke,
            textStrokeWidth: t.textStrokeWidth
        }), i && (t.textFill = "#fff", null == t.textStroke && (t.textStroke = n, null == t.textStrokeWidth && (t.textStrokeWidth = 2))), 
        o && (t.textFill = n)), t.insideRollback = e;
    }
    function Hn(t) {
        var e = t.insideRollback;
        e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, 
        t.insideRollback = null);
    }
    function Vn(t, e) {
        return e = e || e.getModel("textStyle"), u([ t.fontStyle || e && e.getShallow("fontStyle") || "", t.fontWeight || e && e.getShallow("fontWeight") || "", (t.fontSize || e && e.getShallow("fontSize") || 12) + "px", t.fontFamily || e && e.getShallow("fontFamily") || "sans-serif" ].join(" "));
    }
    function Wn(t, e, n, i, o, r) {
        var a, s;
        "function" == typeof o && (r = o, o = null), i && i.isAnimationEnabled() ? (s = t ? "Update" : "", 
        a = i.getShallow("animationDuration" + s), t = i.getShallow("animationEasing" + s), 
        "function" == typeof (s = i.getShallow("animationDelay" + s)) && (s = s(o, i.getAnimationDelayParams ? i.getAnimationDelayParams(e, o) : null)), 
        "function" == typeof a && (a = a(o)), 0 < a ? e.animateTo(n, a, s || 0, t, r, !!r) : (e.stopAnimation(), 
        e.attr(n), r && r())) : (e.stopAnimation(), e.attr(n), r && r());
    }
    function Gn(t, e, n, i, o) {
        Wn(!0, t, e, n, i, o);
    }
    function Xn(t, e, n, i, o) {
        Wn(!1, t, e, n, i, o);
    }
    function Un(t, e, n) {
        return e && !O(e) && (e = Ds.getLocalTransform(e)), n && (e = rt([], e)), H([], t, e);
    }
    function Yn(t, e, i) {
        function o(t) {
            var e = {
                position: B(t.position),
                rotation: t.rotation
            };
            return t.shape && (e.shape = M({}, t.shape)), e;
        }
        var r, n;
        t && e && (n = {}, t.traverse(function(t) {
            !t.isGroup && t.anid && (n[t.anid] = t);
        }), r = n, e.traverse(function(t) {
            var e, n;
            t.isGroup || !t.anid || (e = r[t.anid]) && (n = o(t), t.attr(o(e)), Gn(t, n, i, t.dataIndex));
        }));
    }
    function qn(t, e, n) {
        var i = (e = M({
            rectHover: !0
        }, e)).style = {
            strokeNoScale: !0
        };
        return n = n || {
            x: -1,
            y: -1,
            width: 2,
            height: 2
        }, t ? 0 === t.indexOf("image://") ? (i.image = t.slice(8), T(i, n), new ye(e)) : gn(t.replace("path://", ""), e, n, "center") : void 0;
    }
    function jn(t, e, n, i, o, r, a, s) {
        var l = n - t, h = i - e;
        return !((s = a = (n = a - o) * h - l * (i = s - r)) <= 1e-6 && -1e-6 <= s) && (!((l = ((o = t - o) * h - l * (r = e - r)) / a) < 0 || 1 < l) && !((a = (o * i - n * r) / a) < 0 || 1 < a));
    }
    function Zn(t, e, n) {
        this.parentModel = e, this.ecModel = n, this.option = t;
    }
    function Kn(t, e, n) {
        for (var i = 0; i < e.length && (!e[i] || null != (t = t && "object" == (void 0 === t ? "undefined" : _typeof(t)) ? t[e[i]] : null)); i++) ;
        return null == t && n && (t = n.get(e)), t;
    }
    function $n(t, e) {
        var n = zu(t).getParent;
        return n ? n.call(t, e) : t.parentModel;
    }
    function Qn(t) {
        return [ t || "", Vu++, Math.random().toFixed(5) ].join("_");
    }
    function Jn(t, e, n, i) {
        var o = e[1] - e[0], r = n[1] - n[0];
        if (0 == o) return 0 == r ? n[0] : (n[0] + n[1]) / 2;
        if (i) if (0 < o) {
            if (t <= e[0]) return n[0];
            if (t >= e[1]) return n[1];
        } else {
            if (t >= e[0]) return n[0];
            if (t <= e[1]) return n[1];
        } else {
            if (t === e[0]) return n[0];
            if (t === e[1]) return n[1];
        }
        return (t - e[0]) / o * r + n[0];
    }
    function ti(t, e) {
        switch (t) {
          case "center":
          case "middle":
            t = "50%";
            break;

          case "left":
          case "top":
            t = "0%";
            break;

          case "right":
          case "bottom":
            t = "100%";
        }
        return "string" == typeof t ? t.replace(/^\s+/, "").replace(/\s+$/, "").match(/%$/) ? parseFloat(t) / 100 * e : parseFloat(t) : null == t ? NaN : +t;
    }
    function ei(t, e, n) {
        return null == e && (e = 10), e = Math.min(Math.max(0, e), 20), t = (+t).toFixed(e), 
        n ? t : +t;
    }
    function ni(t) {
        var e = t.toString();
        if (0 < (t = e.indexOf("e"))) {
            var n = +e.slice(t + 1);
            return n < 0 ? -n : 0;
        }
        return (n = e.indexOf(".")) < 0 ? 0 : e.length - 1 - n;
    }
    function ii(t) {
        var e = 2 * Math.PI;
        return (t % e + e) % e;
    }
    function oi(t) {
        return -1e-4 < t && t < 1e-4;
    }
    function ri(t) {
        if (t instanceof Date) return t;
        if ("string" != typeof t) return new Date(null == t ? NaN : Math.round(t));
        var e = Wu.exec(t);
        return e ? e[8] ? (t = +e[4] || 0, "Z" !== e[8].toUpperCase() && (t -= e[8].slice(0, 3)), 
        new Date(Date.UTC(+e[1], +(e[2] || 1) - 1, +e[3] || 1, t, +(e[5] || 0), +e[6] || 0, +e[7] || 0))) : new Date(+e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0), +e[6] || 0, +e[7] || 0) : new Date(NaN);
    }
    function ai(t) {
        return Math.floor(Math.log(t) / Math.LN10);
    }
    function si(t, e) {
        var n = ai(t), i = Math.pow(10, n), o = t / i;
        return t = (e ? o < 1.5 ? 1 : o < 2.5 ? 2 : o < 4 ? 3 : o < 7 ? 5 : 10 : o < 1 ? 1 : o < 2 ? 2 : o < 3 ? 3 : o < 5 ? 5 : 10) * i, 
        -20 <= n ? +t.toFixed(n < 0 ? -n : 0) : t;
    }
    function li(t) {
        return isNaN(t) ? "-" : (t = (t + "").split("."))[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (1 < t.length ? "." + t[1] : "");
    }
    function hi(t) {
        return null == t ? "" : (t + "").replace(Xu, function(t, e) {
            return Uu[e];
        });
    }
    function ui(t, e, n) {
        x(e) || (e = [ e ]);
        var i = e.length;
        if (!i) return "";
        for (var o = e[0].$vars || [], r = 0; r < o.length; r++) {
            var a = Yu[r];
            t = t.replace(Ru(a), Ru(a, 0));
        }
        for (var s = 0; s < i; s++) for (var l = 0; l < o.length; l++) {
            var h = e[s][o[l]];
            t = t.replace(Ru(Yu[l], s), n ? hi(h) : h);
        }
        return t;
    }
    function ci(t, e) {
        var n = (t = C(t) ? {
            color: t,
            extraCssText: e
        } : t || {}).color, i = t.type, e = t.extraCssText, o = t.renderMode || "html", t = t.markerId || "X";
        return n ? "html" === o ? "subItem" === i ? '<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;border-radius:4px;width:4px;height:4px;background-color:' + hi(n) + ";" + (e || "") + '"></span>' : '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:' + hi(n) + ";" + (e || "") + '"></span>' : {
            renderMode: o,
            content: "{marker" + t + "|}  ",
            style: {
                color: n
            }
        } : "";
    }
    function di(t, e) {
        return "0000".substr(0, e - (t += "").length) + t;
    }
    function fi(t, e, n) {
        "week" !== t && "month" !== t && "quarter" !== t && "half-year" !== t && "year" !== t || (t = "MM-dd\nyyyy");
        var i = ri(e), o = i["get" + (l = n ? "UTC" : "") + "FullYear"](), r = i["get" + l + "Month"]() + 1, a = i["get" + l + "Date"](), s = i["get" + l + "Hours"](), e = i["get" + l + "Minutes"](), n = i["get" + l + "Seconds"](), l = i["get" + l + "Milliseconds"]();
        return t.replace("MM", di(r, 2)).replace("M", r).replace("yyyy", o).replace("yy", o % 100).replace("dd", di(a, 2)).replace("d", a).replace("hh", di(s, 2)).replace("h", s).replace("mm", di(e, 2)).replace("m", e).replace("ss", di(n, 2)).replace("s", n).replace("SSS", di(l, 3));
    }
    function pi(s, l, h, u, c) {
        var d = 0, f = 0;
        null == u && (u = 1 / 0), null == c && (c = 1 / 0);
        var p = 0;
        l.eachChild(function(t, e) {
            var n, i, o = t.position, r = t.getBoundingRect(), a = l.childAt(e + 1), e = a && a.getBoundingRect();
            p = "horizontal" === s ? (a = r.width + (e ? -e.x + r.x : 0), u < (n = d + a) || t.newline ? (d = 0, 
            n = a, f += p + h, r.height) : Math.max(p, r.height)) : (e = r.height + (e ? -e.y + r.y : 0), 
            c < (i = f + e) || t.newline ? (d += p + h, f = 0, i = e, r.width) : Math.max(p, r.width)), 
            t.newline || (o[0] = d, o[1] = f, "horizontal" === s ? d = n + h : f = i + h);
        });
    }
    function gi(t, e, n) {
        n = Gu(n || 0);
        var i = e.width, o = e.height, r = ti(t.left, i), a = ti(t.top, o), s = ti(t.right, i), l = ti(t.bottom, o), h = ti(t.width, i), u = ti(t.height, o), c = n[2] + n[0], d = n[1] + n[3], e = t.aspect;
        switch (isNaN(h) && (h = i - s - d - r), isNaN(u) && (u = o - l - c - a), null != e && (isNaN(h) && isNaN(u) && (i / o < e ? h = .8 * i : u = .8 * o), 
        isNaN(h) && (h = e * u), isNaN(u) && (u = h / e)), isNaN(r) && (r = i - s - h - d), 
        isNaN(a) && (a = o - l - u - c), t.left || t.right) {
          case "center":
            r = i / 2 - h / 2 - n[3];
            break;

          case "right":
            r = i - h - d;
        }
        switch (t.top || t.bottom) {
          case "middle":
          case "center":
            a = o / 2 - u / 2 - n[0];
            break;

          case "bottom":
            a = o - u - c;
        }
        return r = r || 0, a = a || 0, isNaN(h) && (h = i - d - r - (s || 0)), isNaN(u) && (u = o - c - a - (l || 0)), 
        (l = new kt(r + n[3], a + n[0], h, u)).margin = n, l;
    }
    function mi(l, h, t) {
        function e(t, e) {
            var n = {}, i = 0, o = {}, r = 0;
            if (ju(t, function(t) {
                o[t] = l[t];
            }), ju(t, function(t) {
                u(h, t) && (n[t] = o[t] = h[t]), c(n, t) && i++, c(o, t) && r++;
            }), d[e]) return c(h, t[1]) ? o[t[2]] = null : c(h, t[2]) && (o[t[1]] = null), o;
            if (2 !== r && i) {
                if (2 <= i) return n;
                for (var a = 0; a < t.length; a++) {
                    var s = t[a];
                    if (!u(n, s) && u(l, s)) {
                        n[s] = l[s];
                        break;
                    }
                }
                return n;
            }
            return o;
        }
        function u(t, e) {
            return t.hasOwnProperty(e);
        }
        function c(t, e) {
            return null != t[e] && "auto" !== t[e];
        }
        function n(t, e, n) {
            ju(t, function(t) {
                e[t] = n[t];
            });
        }
        D(t) || (t = {});
        var d = t.ignoreSize;
        x(d) || (d = [ d, d ]);
        var i = e(Ku[0], 0), t = e(Ku[1], 1);
        n(Ku[0], l, i), n(Ku[1], l, t);
    }
    function yi(t) {
        return e = {}, (n = t) && e && ju(Zu, function(t) {
            n.hasOwnProperty(t) && (e[t] = n[t]);
        }), e;
        var e, n;
    }
    function vi(t) {
        var e = t.get("coordinateSystem"), n = {
            coordSysName: e,
            coordSysDims: [],
            axisMap: L(),
            categoryAxisMap: L()
        };
        return (e = oc[e]) ? (e(t, n, n.axisMap, n.categoryAxisMap), n) : void 0;
    }
    function _i(t) {
        return "category" === t.get("type");
    }
    function xi(t) {
        this.fromDataset = t.fromDataset, this.data = t.data || (t.sourceFormat === lc ? {} : []), 
        this.sourceFormat = t.sourceFormat || hc, this.seriesLayoutBy = t.seriesLayoutBy || cc, 
        this.dimensionsDefine = t.dimensionsDefine, this.encodeDefine = t.encodeDefine && L(t.encodeDefine), 
        this.startIndex = t.startIndex || 0, this.dimensionsDetectCount = t.dimensionsDetectCount;
    }
    function wi(t) {
        var e, n, i, o, r, a, s, l, h = t.option, u = h.data, c = y(u) ? uc : rc, d = !1, f = h.seriesLayoutBy, p = h.sourceHeader, g = h.dimensions, m = (i = (m = t).option).data ? void 0 : m.ecModel.getComponent("dataset", i.datasetIndex || 0);
        m && (u = (i = m.option).source, c = fc(m).sourceFormat, d = !0, f = f || i.seriesLayoutBy, 
        null == p && (p = i.sourceHeader), g = g || i.dimensions), e = c, n = f, i = p, 
        o = g, g = (p = u) ? (e === ac ? ("auto" === i || null == i ? Si(function(t) {
            null != t && "-" !== t && (C(t) ? null == a && (a = 1) : a = 0);
        }, n, p, 10) : a = i ? 1 : 0, o || 1 !== a || (o = [], Si(function(t, e) {
            o[e] = null != t ? t : "";
        }, n, p)), r = o ? o.length : n === dc ? p.length : p[0] ? p[0].length : null) : e === sc ? o || (o = function(t) {
            for (var e, n = 0; n < t.length && !(e = t[n++]); ) ;
            if (e) {
                var i = [];
                return I(e, function(t, e) {
                    i.push(e);
                }), i;
            }
        }(p), s = !0) : e === lc ? o || (o = [], s = !0, I(p, function(t, e) {
            o.push(e);
        })) : e === rc ? r = x(p = Ie(p[0])) && p.length || 1 : e === uc && $a && w(!!o, "dimensions must be given if data is TypedArray."), 
        s && I(o, function(t, e) {
            "name" === (D(t) ? t.name : t) && (l = e);
        }), {
            startIndex: a,
            dimensionsDefine: bi(o),
            dimensionsDetectCount: r,
            potentialNameDimIndex: l
        }) : {
            dimensionsDefine: bi(o)
        }, !(h = h.encode) && m && (h = function(t, e, n, i, o, r) {
            var a = vi(t), s = {}, l = [], h = [], u = t.subType, c = L([ "pie", "map", "funnel" ]), d = L([ "line", "bar", "pictorialBar", "scatter", "effectScatter", "candlestick", "boxplot" ]);
            if (a && null != d.get(u)) {
                var t = t.ecModel, t = fc(t).datasetMap, e = e.uid + "_" + o, f = t.get(e) || t.set(e, {
                    categoryWayDim: 1,
                    valueWayDim: 0
                });
                I(a.coordSysDims, function(t) {
                    var e;
                    null == a.firstCategoryDimIndex ? (e = f.valueWayDim++, s[t] = e, h.push(e)) : a.categoryAxisMap.get(t) ? (s[t] = 0, 
                    l.push(0)) : (e = f.categoryWayDim++, s[t] = e, h.push(e));
                });
            } else if (null != c.get(u)) {
                for (var p, g = 0; g < 5 && null == p; g++) Mi(n, i, o, r.dimensionsDefine, r.startIndex, g) || (p = g);
                null != p && (s.value = p, u = r.potentialNameDimIndex || Math.max(p - 1, 0), h.push(u), 
                l.push(u));
            }
            return l.length && (s.itemName = l), h.length && (s.seriesName = h), s;
        }(t, m, u, c, f, g)), fc(t).source = new xi({
            data: u,
            fromDataset: d,
            seriesLayoutBy: f,
            sourceFormat: c,
            dimensionsDefine: g.dimensionsDefine,
            startIndex: g.startIndex,
            dimensionsDetectCount: g.dimensionsDetectCount,
            encodeDefine: h
        });
    }
    function bi(t) {
        if (t) {
            var n = L();
            return b(t, function(t) {
                if (null == (t = M({}, D(t) ? t : {
                    name: t
                })).name) return t;
                t.name += "", null == t.displayName && (t.displayName = t.name);
                var e = n.get(t.name);
                return e ? t.name += "-" + e.count++ : n.set(t.name, {
                    count: 1
                }), t;
            });
        }
    }
    function Si(t, e, n, i) {
        if (null == i && (i = 1 / 0), e === dc) for (var o = 0; o < n.length && o < i; o++) t(n[o] ? n[o][0] : null, o); else for (var r = n[0] || [], o = 0; o < r.length && o < i; o++) t(r[o], o);
    }
    function Mi(t, e, n, i, o, r) {
        function a(t) {
            return (null == t || !isFinite(t) || "" === t) && (!(!C(t) || "-" === t) || void 0);
        }
        var s, l;
        if (!y(t)) if (i && (l = D(l = i[r]) ? l.name : l), e === ac) if (n === dc) {
            for (var h = t[r], u = 0; u < (h || []).length && u < 5; u++) if (null != (s = a(h[o + u]))) return s;
        } else for (u = 0; u < t.length && u < 5; u++) {
            var c = t[o + u];
            if (c && null != (s = a(c[r]))) return s;
        } else if (e === sc) {
            if (!l) return;
            for (u = 0; u < t.length && u < 5; u++) if ((d = t[u]) && null != (s = a(d[l]))) return s;
        } else if (e === lc) {
            if (!l) return;
            if (!(h = t[l]) || y(h)) return;
            for (u = 0; u < h.length && u < 5; u++) if (null != (s = a(h[u]))) return s;
        } else if (e === rc) for (u = 0; u < t.length && u < 5; u++) {
            var d, f = Ie(d = t[u]);
            if (!x(f)) return;
            if (null != (s = a(f[r]))) return s;
        }
    }
    function Ti(t, e) {
        t._seriesIndicesMap = L(t._seriesIndices = b(e, function(t) {
            return t.componentIndex;
        }) || []);
    }
    function Ii(t, e) {
        return e.hasOwnProperty("subType") ? l(t, function(t) {
            return t.subType === e.subType;
        }) : t;
    }
    function Ci(t) {
        if ($a && !t._seriesIndices) throw new Error("Option should contains series.");
    }
    function Di(e) {
        I(mc, function(t) {
            this[t] = v(e[t], e);
        }, this);
    }
    function ki() {
        this._coordinateSystems = [];
    }
    function Ai(t) {
        this._api = t, this._timelineOptions = [], this._mediaList = [], this._mediaDefault, 
        this._currentMediaIndices = [], this._optionBackup, this._newBaseOption;
    }
    function Pi(t) {
        var e = t && t.itemStyle;
        if (e) for (var n = 0, i = Cc.length; n < i; n++) {
            var o = Cc[n], r = e.normal, a = e.emphasis;
            r && r[o] && (t[o] = t[o] || {}, t[o].normal ? g(t[o].normal, r[o]) : t[o].normal = r[o], 
            r[o] = null), a && a[o] && (t[o] = t[o] || {}, t[o].emphasis ? g(t[o].emphasis, a[o]) : t[o].emphasis = a[o], 
            a[o] = null);
        }
    }
    function Oi(t, e, n) {
        var i, o;
        t && t[e] && (t[e].normal || t[e].emphasis) && (i = t[e].normal, o = t[e].emphasis, 
        i && (n ? (t[e].normal = t[e].emphasis = null, T(t[e], i)) : t[e] = i), o && (t.emphasis = t.emphasis || {}, 
        t.emphasis[e] = o));
    }
    function Li(t) {
        Oi(t, "itemStyle"), Oi(t, "lineStyle"), Oi(t, "areaStyle"), Oi(t, "label"), Oi(t, "labelLine"), 
        Oi(t, "upperLabel"), Oi(t, "edgeLabel");
    }
    function Ei(t, e) {
        var n = Ic(t) && t[e], i = Ic(n) && n.textStyle;
        if (i) for (var o = 0, r = Ul.length; o < r; o++) e = Ul[o], i.hasOwnProperty(e) && (n[e] = i[e]);
    }
    function Bi(t) {
        t && (Li(t), Ei(t, "label"), t.emphasis && Ei(t.emphasis, "label"));
    }
    function zi(t) {
        return x(t) ? t : t ? [ t ] : [];
    }
    function Ri(t) {
        return (x(t) ? t[0] : t) || {};
    }
    function Ni(e) {
        I(Dc, function(t) {
            t[0] in e && !(t[1] in e) && (e[t[1]] = e[t[0]]);
        });
    }
    function Fi(g) {
        I(g, function(h, u) {
            var c = [], d = [ NaN, NaN ], t = [ h.stackResultDimension, h.stackedOverDimension ], f = h.data, p = h.isStackedByIndex, t = f.map(t, function(t, e, n) {
                var i, o, r = f.get(h.stackedDimension, n);
                if (isNaN(r)) return d;
                p ? o = f.getRawIndex(n) : i = f.get(h.stackedByDimension, n);
                for (var a = NaN, s = u - 1; 0 <= s; s--) {
                    var l = g[s];
                    if (p || (o = l.data.rawIndexOf(l.stackedByDimension, i)), 0 <= o && (l = l.data.getByRawIndex(l.stackResultDimension, o), 
                    0 <= r && 0 < l || r <= 0 && l < 0)) {
                        r += l, a = l;
                        break;
                    }
                }
                return c[0] = r, c[1] = a, c;
            });
            f.hostModel.setData(t), h.data = t;
        });
    }
    function Hi(t, e) {
        xi.isInstance(t) || (t = xi.seriesDataToSource(t)), this._source = t;
        var n = this._data = t.data, i = t.sourceFormat;
        if (i === uc) {
            if ($a && null == e) throw new Error("Typed array data must specify dimension size");
            this._offset = 0, this._dimSize = e, this._data = n;
        }
        t = Ac[i === ac ? i + "_" + t.seriesLayoutBy : i], $a && w(t, "Invalide sourceFormat: " + i), 
        M(this, t);
    }
    function Vi() {
        return this._data.length;
    }
    function Wi(t) {
        return this._data[t];
    }
    function Gi(t) {
        for (var e = 0; e < t.length; e++) this._data.push(t[e]);
    }
    function Xi(t, e, n) {
        return null != n ? t[n] : t;
    }
    function Ui(t, e, n, i) {
        return Yi(t[i], this._dimensionInfos[e]);
    }
    function Yi(t, e) {
        var n = e && e.type;
        return "ordinal" !== n ? ("time" === n && "number" != typeof t && null != t && "-" !== t && (t = +ri(t)), 
        null == t || "" === t ? NaN : +t) : (e = e && e.ordinalMeta) ? e.parseAndCollect(t) : t;
    }
    function qi(t, e, n) {
        if (t) {
            var i = t.getRawDataItem(e);
            if (null != i) {
                var o, r, a = t.getProvider().getSource().sourceFormat;
                return (n = t.getDimensionInfo(n)) && (o = n.name, r = n.index), Pc[a](i, e, r, o);
            }
        }
    }
    function ji(t) {
        return new Zi(t);
    }
    function Zi(t) {
        t = t || {}, this._reset = t.reset, this._plan = t.plan, this._count = t.count, 
        this._onDirty = t.onDirty, this._dirty = !0, this.context;
    }
    function Ki(t, e, n, i, o, r) {
        Hc.reset(n, i, o, r), t._callingProgress = e, t._callingProgress({
            start: n,
            end: i,
            count: i - n,
            next: Hc.next
        }, t.context);
    }
    function $i(t) {
        var e, n, i = t.name;
        De(t) || (t.name = (t = (e = t.getRawData()).mapDimension("seriesName", !0), n = [], 
        I(t, function(t) {
            (t = e.getDimensionInfo(t)).displayName && n.push(t.displayName);
        }), n.join(" ") || i));
    }
    function Qi(t) {
        return t.model.getRawData().count();
    }
    function Ji(t) {
        return (t = t.model).setData(t.getRawData().cloneShallow()), to;
    }
    function to(t, e) {
        t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData);
    }
    function eo(e, n) {
        I(e.CHANGABLE_METHODS, function(t) {
            e.wrapMethod(t, s(no, n));
        });
    }
    function no(t) {
        (t = io(t)) && t.setOutputEnd(this.count());
    }
    function io(t) {
        var e = (t.ecModel || {}).scheduler, n = e && e.getPipeline(t.uid);
        if (n) return !(e = n.currentTask) || (n = e.agentStubMap) && (e = n.get(t.uid)), 
        e;
    }
    function oo() {
        this.group = new Qs(), this.uid = Qn("viewChart"), this.renderTask = ji({
            plan: so,
            reset: lo
        }), this.renderTask.context = {
            view: this
        };
    }
    function ro(t, e, n) {
        if (t && (t.trigger(e, n), t.isGroup && !On(t))) for (var i = 0, o = t.childCount(); i < o; i++) ro(t.childAt(i), e, n);
    }
    function ao(e, t, n) {
        var i = Ae(e, t), o = t && null != t.highlightKey ? Ln(t.highlightKey) : null;
        null != i ? I(Me(i), function(t) {
            ro(e.getItemGraphicEl(t), n, o);
        }) : e.eachItemGraphicEl(function(t) {
            ro(t, n, o);
        });
    }
    function so(t) {
        return jc(t.model);
    }
    function lo(t) {
        var e = t.model, n = t.ecModel, i = t.api, o = t.payload, r = e.pipelineContext.progressiveRender, a = t.view, t = o && qc(o).updateMethod;
        return "render" !== (t = r ? "incrementalPrepareRender" : t && a[t] ? t : "render") && a[t](e, n, i, o), 
        Zc[t];
    }
    function ho(t, n, i) {
        function o() {
            c = new Date().getTime(), d = null, t.apply(s, l || []);
        }
        var r, a, s, l, h, u = 0, c = 0, d = null;
        function e() {
            r = new Date().getTime(), s = this, l = arguments;
            var t = h || n, e = h || i;
            h = null, a = r - (e ? u : c) - t, clearTimeout(d), e ? d = setTimeout(o, t) : 0 <= a ? o() : d = setTimeout(o, -a), 
            u = r;
        }
        return n = n || 0, e.clear = function() {
            d && (clearTimeout(d), d = null);
        }, e.debounceNextCall = function(t) {
            h = t;
        }, e;
    }
    function uo(t, e, n, i) {
        this.ecInstance = t, this.api = e, this.unfinished, n = this._dataProcessorHandlers = n.slice(), 
        i = this._visualHandlers = i.slice(), this._allHandlers = n.concat(i), this._stageTaskMap = L();
    }
    function co(a, t, s, l, h) {
        function u(t, e) {
            return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id));
        }
        var c;
        h = h || {}, I(t, function(n) {
            var t, e, i, o, r;
            h.visualType && h.visualType !== n.visualType || (t = (o = a._stageTaskMap.get(n.uid)).seriesTaskMap, 
            (e = o.overallTask) ? ((o = e.agentStubMap).each(function(t) {
                u(h, t) && (t.dirty(), i = !0);
            }), i && e.dirty(), nd(e, l), r = a.getPerformArgs(e, h.block), o.each(function(t) {
                t.perform(r);
            }), c |= e.perform(r)) : t && t.each(function(t) {
                u(h, t) && t.dirty();
                var e = a.getPerformArgs(t, h.block);
                e.skip = !n.performRawSeries && s.isSeriesFiltered(t.context.model), nd(t, l), c |= t.perform(e);
            }));
        }), a.unfinished |= c;
    }
    function fo(t) {
        t.overallReset(t.ecModel, t.api, t.payload);
    }
    function po(t) {
        return t.overallProgress && go;
    }
    function go() {
        this.agent.dirty(), this.getDownstream().dirty();
    }
    function mo() {
        this.agent && this.agent.dirty();
    }
    function yo(t) {
        return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload);
    }
    function vo(t) {
        return t.useClearVisual && t.data.clearAllVisual(), 1 < (t = t.resetDefines = Me(t.reset(t.model, t.ecModel, t.api, t.payload))).length ? b(t, function(t, e) {
            return _o(e);
        }) : id;
    }
    function _o(r) {
        return function(t, e) {
            var n = e.data, i = e.resetDefines[r];
            if (i && i.dataEach) for (var o = t.start; o < t.end; o++) i.dataEach(n, o); else i && i.progress && i.progress(t, n);
        };
    }
    function xo(t) {
        return t.data.count();
    }
    function wo(t, e, n) {
        e = e.uid, (e = t._pipelineMap.get(e)).head || (e.head = n), e.tail && e.tail.pipe(n), 
        (e.tail = n).__idxInPipeline = e.count++, n.__pipeline = e;
    }
    function bo(t, e) {
        for (var n in e.prototype) t[n] = E;
    }
    function So(i) {
        return function(t, e, n) {
            t = t && t.toLowerCase(), gs.prototype[i].call(this, t, e, n);
        };
    }
    function Mo() {
        gs.call(this);
    }
    function To(t, e, n) {
        function i(t, e) {
            return t.__prio - e.__prio;
        }
        n = n || {}, "string" == typeof e && (e = Cd[e]), this.id, this.group, this._dom = t;
        var o = "canvas";
        $a && (o = ("undefined" == typeof window ? global : window).__ECHARTS__DEFAULT__RENDERER__ || o), 
        n = this._zr = Se(t, {
            renderer: n.renderer || o,
            devicePixelRatio: n.devicePixelRatio,
            width: n.width,
            height: n.height
        }), this._throttledZrFlush = ho(v(n.flush, n), 17), (e = S(e)) && Mc(e, !0), this._theme = e, 
        this._chartsViews = [], this._chartsMap = {}, this._componentsViews = [], this._componentsMap = {}, 
        this._coordSysMgr = new ki();
        var r, a, s, e = this._api = (e = (r = this)._coordSysMgr, M(new Di(r), {
            getCoordinateSystems: v(e.getCoordinateSystems, e),
            getComponentByElement: function(t) {
                for (;t; ) {
                    var e = t.__ecComponentInfo;
                    if (null != e) return r._model.getComponent(e.mainType, e.index);
                    t = t.parent;
                }
            }
        }));
        Bt(Id, i), Bt(Sd, i), this._scheduler = new uo(this, e, Sd, Id), gs.call(this, this._ecEventProcessor = new Fo()), 
        this._messageCenter = new Mo(), this._initEvents(), this.resize = v(this.resize, this), 
        this._pendingActions = [], n.animation.on("frame", this._onframe, this), s = this, 
        (a = n).on("rendered", function() {
            s.trigger("rendered"), !a.animation.isFinished() || s[yd] || s._scheduler.unfinished || s._pendingActions.length || s.trigger("finished");
        }), c(this);
    }
    function Io(t, e, n) {
        var i, o = this._model, r = this._coordSysMgr.getCoordinateSystems();
        e = Oe(o, e);
        for (var a = 0; a < r.length; a++) {
            var s = r[a];
            if (s[t] && null != (i = s[t](o, e, n))) return i;
        }
        $a && console.warn("No coordinate system that supports " + t + " found by the given finder.");
    }
    function Co(t) {
        var e = t._model, n = t._scheduler;
        n.restorePipelines(e), n.prepareStageTasks(), Lo(t, "component", e, n), Lo(t, "chart", e, n), 
        n.plan();
    }
    function Do(e, n, i, o, t) {
        function r(t) {
            t && t.__alive && t[n] && t[n](t.__model, a, e._api, i);
        }
        var a = e._model;
        if (!o) return cd(e._componentsViews.concat(e._chartsViews), r), 0;
        var s = {};
        s[o + "Id"] = i[o + "Id"], s[o + "Index"] = i[o + "Index"], s[o + "Name"] = i[o + "Name"], 
        s = {
            mainType: o,
            query: s
        }, t && (s.subType = t);
        var l = i.excludeSeriesId;
        null != l && (l = L(Me(l))), a && a.eachComponent(s, function(t) {
            l && null != l.get(t.id) || r(e["series" === o ? "_chartsMap" : "_componentsMap"][t.__viewId]);
        }, e);
    }
    function ko(t, e) {
        var n = t._chartsMap, i = t._scheduler;
        e.eachSeries(function(t) {
            i.updateStreamModes(t, n[t.__viewId]);
        });
    }
    function Ao(e, t) {
        var n = e.type, i = e.escapeConnect, o = wd[n], r = o.actionInfo, a = (s = (r.update || "update").split(":")).pop(), s = null != s[0] && pd(s[0]);
        this[md] = !0;
        var l = [ e ], h = !1;
        e.batch && (h = !0, l = b(e.batch, function(t) {
            return (t = T(M({}, t), e)).batch = null, t;
        }));
        var u, c = [], d = "highlight" === n || "downplay" === n;
        cd(l, function(t) {
            (u = (u = o.action(t, this._model, this._api)) || M({}, t)).type = r.event || u.type, 
            c.push(u), d ? Do(this, a, t, "series") : s && Do(this, a, t, s.main, s.sub);
        }, this), "none" === a || d || s || (this[yd] ? (Co(this), _d.update.call(this, e), 
        this[yd] = !1) : _d[a].call(this, e)), u = h ? {
            type: r.event || n,
            escapeConnect: i,
            batch: c
        } : c[0], this[md] = !1, t || this._messageCenter.trigger(u.type, u);
    }
    function Po(t) {
        for (var e = this._pendingActions; e.length; ) {
            var n = e.shift();
            Ao.call(this, n, t);
        }
    }
    function Oo(t) {
        t || this.trigger("updated");
    }
    function Lo(t, e, r, a) {
        function n(t) {
            var e, n, i = "_ec_" + t.id + "_" + t.type, o = h[i];
            o || (e = pd(t.type), n = s ? Uc.getClass(e.main, e.sub) : oo.getClass(e.sub), $a && ud(n, e.sub + " does not exist."), 
            (o = new n()).init(r, c), h[i] = o, l.push(o), u.add(o.group)), t.__viewId = o.__id = i, 
            o.__alive = !0, o.__model = t, o.group.__ecComponentInfo = {
                mainType: t.mainType,
                index: t.componentIndex
            }, s || a.prepareView(o, t, r, c);
        }
        for (var s = "component" === e, l = s ? t._componentsViews : t._chartsViews, h = s ? t._componentsMap : t._chartsMap, u = t._zr, c = t._api, i = 0; i < l.length; i++) l[i].__alive = !1;
        for (s ? r.eachComponent(function(t, e) {
            "series" !== t && n(e);
        }) : r.eachSeries(n), i = 0; i < l.length; ) {
            var o = l[i];
            o.__alive ? i++ : (s || o.renderTask.dispose(), u.remove(o.group), o.dispose(r, c), 
            l.splice(i, 1), delete h[o.__id], o.__id = o.group.__ecComponentInfo = null);
        }
    }
    function Eo(t) {
        t.clearColorPalette(), t.eachSeries(function(t) {
            t.clearColorPalette();
        });
    }
    function Bo(t, e, n, i) {
        var o = e, r = n, a = i;
        cd(t._componentsViews, function(t) {
            var e = t.__model;
            t.render(e, o, r, a), No(e, t);
        }), cd(t._chartsViews, function(t) {
            t.__alive = !1;
        }), zo(t, e, 0, i), cd(t._chartsViews, function(t) {
            t.__alive || t.remove(e, n);
        });
    }
    function zo(o, t, e, r, a) {
        var s, n, i, l, h, u = o._scheduler;
        t.eachSeries(function(t) {
            var e = o._chartsMap[t.__viewId];
            e.__alive = !0;
            var n, i = e.renderTask;
            u.updatePayload(i, r), a && a.get(t.uid) && i.dirty(), s |= i.perform(u.getPerformArgs(i)), 
            e.group.silent = !!t.get("silent"), No(t, e), n = t.get("blendMode") || null, $a && !ts.canvasSupported && n && "source-over" !== n && console.warn("Only canvas support blendMode"), 
            e.group.traverse(function(t) {
                t.isGroup || t.style.blend !== n && t.setStyle("blend", n), t.eachPendingDisplayable && t.eachPendingDisplayable(function(t) {
                    t.setStyle("blend", n);
                });
            });
        }), u.unfinished |= s, i = t, l = (n = o)._zr.storage, h = 0, l.traverse(function() {
            h++;
        }), h > i.get("hoverLayerThreshold") && !ts.node && i.eachSeries(function(t) {
            t.preventUsingHoverLayer || (t = n._chartsMap[t.__viewId]).__alive && t.group.traverse(function(t) {
                t.useHoverLayer = !0;
            });
        }), td(o._zr.dom, t);
    }
    function Ro(e, n) {
        cd(Td, function(t) {
            t(e, n);
        });
    }
    function No(t, e) {
        var n = t.get("z"), i = t.get("zlevel");
        e.group.traverse(function(t) {
            "group" !== t.type && (null != n && (t.z = n), null != i && (t.zlevel = i));
        });
    }
    function Fo() {
        this.eventInfo;
    }
    function Ho(t) {
        Ad[t] = !1;
    }
    function Vo(t) {
        return kd[(e = Ld, t.getAttribute ? t.getAttribute(e) : t[e])];
        var e;
    }
    function Wo(t, e) {
        Cd[t] = e;
    }
    function Go(t) {
        Md.push(t);
    }
    function Xo(t, e) {
        jo(Sd, t, e, 1e3);
    }
    function Uo(t, e, n) {
        "function" == typeof e && (n = e, e = "");
        var i = fd(t) ? t.type : [ t, t = {
            event: e
        } ][0];
        t.event = (t.event || i).toLowerCase(), e = t.event, ud(vd.test(i) && vd.test(e)), 
        wd[i] || (wd[i] = {
            action: n,
            actionInfo: t
        }), bd[e] = i;
    }
    function Yo(t, e) {
        jo(Id, t, e, 1e3, "layout");
    }
    function qo(t, e) {
        jo(Id, t, e, 3e3, "visual");
    }
    function jo(t, e, n, i, o) {
        if ((dd(e) || fd(e)) && (n = e, e = i), $a) {
            if (isNaN(e) || null == e) throw new Error("Illegal priority");
            cd(t, function(t) {
                ud(t.__raw !== n);
            });
        }
        return (o = uo.wrapStageHandler(n, o)).__prio = e, o.__raw = n, t.push(o), o;
    }
    function Zo(t, e) {
        Dd[t] = e;
    }
    function Ko(t) {
        return Ju.extend(t);
    }
    function $o(t) {
        return Uc.extend(t);
    }
    function Qo(t) {
        return t;
    }
    function Jo(t, e, n, i, o) {
        this._old = t, this._new = e, this._oldKeyGetter = n || Qo, this._newKeyGetter = i || Qo, 
        this.context = o;
    }
    function tr(t, e, n, i, o) {
        for (var r = 0; r < t.length; r++) {
            var a = "_ec_" + o[i](t[r], r), s = e[a];
            null == s ? (n.push(a), e[a] = r) : (s.length || (e[a] = s = [ s ]), s.push(r));
        }
    }
    function er(t, e) {
        return t.hasOwnProperty(e) || (t[e] = []), t[e];
    }
    function nr(t) {
        return 65535 < t._rawCount ? Nd : Hd;
    }
    function ir(e, n) {
        I(Vd.concat(n.__wrappedMethods || []), function(t) {
            n.hasOwnProperty(t) && (e[t] = n[t]);
        }), e.__wrappedMethods = n.__wrappedMethods, I(Wd, function(t) {
            e[t] = S(n[t]);
        }), e._calculationInfo = M(n._calculationInfo);
    }
    function or(t, e, n, i, o) {
        var r = Rd[e.type], a = i - 1, s = e.name, l = t[s][a];
        if (l && l.length < n) {
            for (var h = new r(Math.min(o - a * n, n)), u = 0; u < l.length; u++) h[u] = l[u];
            t[s][a] = h;
        }
        for (var c = i * n; c < o; c += n) t[s].push(new r(Math.min(o - c, n)));
    }
    function rr(o) {
        var r = o._invertedIndicesMap;
        I(r, function(t, e) {
            var n = o._dimensionInfos[e].ordinalMeta;
            if (n) {
                t = r[e] = new Fd(n.categories.length);
                for (var i = 0; i < t.length; i++) t[i] = -1;
                for (i = 0; i < o._count; i++) t[o.get(e, i)] = i;
            }
        });
    }
    function ar(t, e, n) {
        var i, o, r;
        return null != e && (o = t._chunkSize, r = Math.floor(n / o), o = n % o, e = t.dimensions[e], 
        (r = t._storage[e][r]) && (i = r[o], (e = t._dimensionInfos[e].ordinalMeta) && e.categories.length && (i = e.categories[i]))), 
        i;
    }
    function sr(t) {
        return t;
    }
    function lr(t) {
        return t < this._count && 0 <= t ? this._indices[t] : -1;
    }
    function hr(t, e) {
        var n = t._idList[e];
        return null == n && (n = ar(t, t._idDimIdx, e)), null == n && (n = "e\0\0" + e), 
        n;
    }
    function ur(t) {
        return x(t) || (t = [ t ]), t;
    }
    function cr(t, e) {
        for (var n = 0; n < e.length; n++) t._dimensionInfos[e[n]] || console.error("Unkown dimension " + e[n]);
    }
    function dr(t, e) {
        var n = t.dimensions, i = new Ed(b(n, t.getDimensionInfo, t), t.hostModel);
        ir(i, t);
        for (var o = i._storage = {}, r = t._storage, a = 0; a < n.length; a++) {
            var s = n[a];
            r[s] && (0 <= m(e, s) ? (o[s] = function(t) {
                for (var e, n, i = new Array(t.length), o = 0; o < t.length; o++) i[o] = (e = t[o], 
                n = void 0, (n = e.constructor) === Array ? e.slice() : new n(e));
                return i;
            }(r[s]), i._rawExtent[s] = fr(), i._extent[s] = null) : o[s] = r[s]);
        }
        return i;
    }
    function fr() {
        return [ 1 / 0, -1 / 0 ];
    }
    function pr(t, e, n) {
        if (n || null != e.get(t)) {
            for (var i = 0; null != e.get(t + i); ) i++;
            t += i;
        }
        return e.set(t, !0), t;
    }
    function gr(t, e) {
        return !!e && e === t.getCalculationInfo("stackedDimension");
    }
    function mr(t, e, n) {
        n = n || {}, xi.isInstance(t) || (t = xi.seriesDataToSource(t));
        var i = e.get("coordinateSystem"), i = ki.get(i), o = vi(e);
        o && (l = b(o.coordSysDims, function(t) {
            var e = {
                name: t
            };
            return (t = o.axisMap.get(t)) && (t = t.get("type"), e.type = "category" === t ? "ordinal" : "time" === t ? "time" : "float"), 
            e;
        })), l = l || i && (i.getDimensionsInfo ? i.getDimensionsInfo() : i.dimensions.slice()) || [ "x", "y" ];
        var r, a, s, l = (s = t, function(t, e, n) {
            function s(t, e, n) {
                null != Bd.get(e) ? t.otherDims[e] = n : (t.coordDim = e, t.coordDimIndex = n, u.set(e, !0));
            }
            xi.isInstance(e) || (e = xi.seriesDataToSource(e)), n = n || {}, t = (t || []).slice();
            for (var i, o, r, a = (n.dimsDef || []).slice(), l = L(n.encodeDef), h = L(), u = L(), c = [], d = (i = t, 
            o = n.dimCount, r = Math.max(e.dimensionsDetectCount || 1, i.length, a.length, o || 0), 
            I(i, function(t) {
                (t = t.dimsDef) && (r = Math.max(r, t.length));
            }), r), f = 0; f < d; f++) {
                var p = a[f] = M({}, D(a[f]) ? a[f] : {
                    name: a[f]
                }), g = p.name, m = c[f] = {
                    otherDims: {}
                };
                null != g && null == h.get(g) && (m.name = m.displayName = g, h.set(g, f)), null != p.type && (m.type = p.type), 
                null != p.displayName && (m.displayName = p.displayName);
            }
            l.each(function(t, n) {
                var i;
                1 === (t = Me(t).slice()).length && !C(t[0]) && t[0] < 0 ? l.set(n, !1) : (i = l.set(n, []), 
                I(t, function(t, e) {
                    C(t) && (t = h.get(t)), null != t && t < d && (i[e] = t, s(c[t], n, e));
                }));
            });
            var y = 0;
            I(t, function(n) {
                var i, o, r, t;
                C(n) ? (i = n, n = {}) : (i = n.name, t = n.ordinalMeta, n.ordinalMeta = null, (n = S(n)).ordinalMeta = t, 
                o = n.dimsDef, r = n.otherDims, n.name = n.coordDim = n.coordDimIndex = n.dimsDef = n.otherDims = null);
                var e = l.get(i);
                if (!1 !== e) {
                    if (!(e = Me(e)).length) for (var a = 0; a < (o && o.length || 1); a++) {
                        for (;y < c.length && null != c[y].coordDim; ) y++;
                        y < c.length && e.push(y++);
                    }
                    I(e, function(t, e) {
                        s(T(t = c[t], n), i, e), null == t.name && o && (D(e = o[e]) || (e = {
                            name: e
                        }), t.name = t.displayName = e.name, t.defaultTooltip = e.defaultTooltip), r && T(t.otherDims, r);
                    });
                }
            });
            for (var v = n.generateCoord, _ = null != (x = n.generateCoordCount), x = v ? x || 1 : 0, w = v || "value", b = 0; b < d; b++) null == (m = c[b] = c[b] || {}).coordDim && (m.coordDim = pr(w, u, _), 
            m.coordDimIndex = 0, (!v || x <= 0) && (m.isExtraCoord = !0), x--), null == m.name && (m.name = pr(m.coordDim, h)), 
            null == m.type && (m.name, Mi(e.data, e.sourceFormat, e.seriesLayoutBy, e.dimensionsDefine, e.startIndex, b)) && (m.type = "ordinal");
            return c;
        }((i = (i = {
            coordDimensions: l,
            generateCoord: n.generateCoord
        }) || {}).coordDimensions || [], s, {
            dimsDef: i.dimensionsDefine || s.dimensionsDefine,
            encodeDef: i.encodeDefine || s.encodeDefine,
            dimCount: i.dimensionsCount,
            generateCoord: i.generateCoord,
            generateCoordCount: i.generateCoordCount
        }));
        o && I(l, function(t, e) {
            var n = t.coordDim;
            (n = o.categoryAxisMap.get(n)) && (null == r && (r = e), t.ordinalMeta = n.getOrdinalMeta()), 
            null != t.otherDims.itemName && (a = !0);
        }), a || null == r || (l[r].otherDims.itemName = 0);
        var h, u, c, d, f, p, g, m, y, v = (h = l, g = (i = {}).byIndex, m = i.stackedCoordDimension, 
        y = !(!(n = e) || !n.get("stack")), I(h, function(t, e) {
            C(t) && (h[e] = t = {
                name: t
            }), y && !t.isExtraCoord && (g || u || !t.ordinalMeta || (u = t), c || "ordinal" === t.type || "time" === t.type || m && m !== t.coordDim || (c = t));
        }), !c || g || u || (g = !0), c && (v = "__\0ecstackresult", d = "__\0ecstackedover", 
        u && (u.createInvertedIndices = !0), f = c.coordDim, n = c.type, p = 0, I(h, function(t) {
            t.coordDim === f && p++;
        }), h.push({
            name: v,
            coordDim: f,
            coordDimIndex: p,
            type: n,
            isExtraCoord: !0,
            isCalculationCoord: !0
        }), p++, h.push({
            name: d,
            coordDim: d,
            coordDimIndex: p,
            type: n,
            isExtraCoord: !0,
            isCalculationCoord: !0
        })), {
            stackedDimension: c && c.name,
            stackedByDimension: u && u.name,
            isStackedByIndex: g,
            stackedOverDimension: d,
            stackResultDimension: v
        });
        (e = new Ed(l, e)).setCalculationInfo(v);
        v = null == r || ((l = t).sourceFormat !== rc || null == (l = function(t) {
            for (var e = 0; e < t.length && null == t[e]; ) e++;
            return t[e];
        }(l.data || [])) || x(Ie(l))) ? null : function(t, e, n, i) {
            return i === r ? n : this.defaultDimValueGetter(t, e, n, i);
        };
        return e.hasItemOption = !1, e.initData(t, null, v), e;
    }
    function yr(t, e) {
        var n, i;
        "image" !== this.type && (n = this.style, (i = this.shape) && "line" === i.symbolType ? n.stroke = t : this.__isEmptyBrush ? (n.stroke = t, 
        n.fill = e || "#fff") : (n.fill && (n.fill = t), n.stroke && (n.stroke = t)), this.dirty(!1));
    }
    function vr(t, e, n, i, o, r, a) {
        var s = 0 === t.indexOf("empty");
        return s && (t = t.substr(5, 1).toLowerCase() + t.substr(6)), (o = 0 === t.indexOf("image://") ? mn(t.slice(8), new kt(e, n, i, o), a ? "center" : "cover") : 0 === t.indexOf("path://") ? gn(t.slice(7), {}, new kt(e, n, i, o), a ? "center" : "cover") : new Yd({
            shape: {
                symbolType: t,
                x: e,
                y: n,
                width: i,
                height: o
            }
        })).__isEmptyBrush = s, o.setColor = yr, o.setColor(r), o;
    }
    function _r(t, e, n) {
        Qs.call(this), this.updateData(t, e, n);
    }
    function xr(t) {
        return [ t[0] / 2, t[1] / 2 ];
    }
    function wr(t, e) {
        this.parent.drift(t, e);
    }
    function br(t, e) {
        var n, i;
        this.incremental || this.useHoverLayer || ("emphasis" === e ? (i = (n = this.__symbolOriginalScale)[1] / n[0], 
        i = {
            scale: [ Math.max(1.1 * n[0], n[0] + 3), Math.max(1.1 * n[1], n[1] + 3 * i) ]
        }, this.animateTo(i, 400, "elasticOut")) : "normal" === e && this.animateTo({
            scale: this.__symbolOriginalScale
        }, 400, "elasticOut"));
    }
    function Sr(t) {
        this.group = new Qs(), this._symbolCtor = t || _r;
    }
    function Mr(t, e, n, i) {
        return !(!e || isNaN(e[0]) || isNaN(e[1]) || i.isIgnore && i.isIgnore(n) || i.clipShape && !i.clipShape.contain(e[0], e[1]) || "none" === t.getItemVisual(n, "symbol"));
    }
    function Tr(t) {
        return null == t || D(t) || (t = {
            isIgnore: t
        }), t || {};
    }
    function Ir(t) {
        return {
            itemStyle: (t = t.hostModel).getModel("itemStyle").getItemStyle([ "color" ]),
            hoverItemStyle: t.getModel("emphasis.itemStyle").getItemStyle(),
            symbolRotate: t.get("symbolRotate"),
            symbolOffset: t.get("symbolOffset"),
            hoverAnimation: t.get("hoverAnimation"),
            labelModel: t.getModel("label"),
            hoverLabelModel: t.getModel("emphasis.label"),
            cursorStyle: t.get("cursor")
        };
    }
    function Cr(t, e, n) {
        var i, o = t.getBaseAxis(), r = (a = n, l = 0, s = (s = h = t.getOtherAxis(o)).scale.getExtent(), 
        "start" === a ? l = s[0] : "end" === a ? l = s[1] : 0 < s[0] ? l = s[0] : s[1] < 0 && (l = s[1]), 
        l), n = o.dim, a = h.dim, s = e.mapDimension(a), l = e.mapDimension(n), o = "x" === a || "radius" === a ? 1 : 0, h = b(t.dimensions, function(t) {
            return e.mapDimension(t);
        }), t = e.getCalculationInfo("stackResultDimension");
        return (i |= gr(e, h[0])) && (h[0] = t), (i |= gr(e, h[1])) && (h[1] = t), {
            dataDimsForPoint: h,
            valueStart: r,
            valueAxisDim: a,
            baseAxisDim: n,
            stacked: !!i,
            valueDim: s,
            baseDim: l,
            baseDataOffset: o,
            stackedOverDimension: e.getCalculationInfo("stackedOverDimension")
        };
    }
    function Dr(t, e, n, i) {
        var o = NaN;
        t.stacked && (o = n.get(n.getCalculationInfo("stackedOverDimension"), i)), isNaN(o) && (o = t.valueStart);
        var r = t.baseDataOffset, a = [];
        return a[r] = n.get(t.baseDim, i), a[1 - r] = o, e.dataToPoint(a);
    }
    function kr(t) {
        return isNaN(t[0]) || isNaN(t[1]);
    }
    function Ar(t, e, n, i, o, r, a, s, l, h) {
        return ("none" !== h && h ? function(t, e, n, i, o, r, a, s, l, h, u) {
            for (var c = 0, d = n, f = 0; f < i; f++) {
                var p, g, m, y = e[d];
                if (o <= d || d < 0) break;
                if (kr(y)) {
                    if (u) {
                        d += r;
                        continue;
                    }
                    break;
                }
                d === n ? t[0 < r ? "moveTo" : "lineTo"](y[0], y[1]) : 0 < l ? (p = e[c], m = (y[g = "y" === h ? 1 : 0] - p[g]) * l, 
                ef(of, p), of[g] = p[g] + m, ef(rf, y), rf[g] = y[g] - m, t.bezierCurveTo(of[0], of[1], rf[0], rf[1], y[0], y[1])) : t.lineTo(y[0], y[1]), 
                c = d, d += r;
            }
            return f;
        } : function(t, e, n, i, o, r, a, s, l, h, u) {
            for (var c, d = 0, f = n, p = 0; p < i; p++) {
                var g = e[f];
                if (o <= f || f < 0) break;
                if (kr(g)) {
                    if (u) {
                        f += r;
                        continue;
                    }
                    break;
                }
                if (f === n) t[0 < r ? "moveTo" : "lineTo"](g[0], g[1]), ef(of, g); else if (0 < l) {
                    var m = f + r, y = e[m];
                    if (u) for (;y && kr(e[m]); ) y = e[m += r];
                    var v, _ = .5, x = e[d];
                    !(y = e[m]) || kr(y) ? ef(rf, g) : (kr(y) && !u && (y = g), R(nf, y, x), x = "x" === h || "y" === h ? (v = "x" === h ? 0 : 1, 
                    c = Math.abs(g[v] - x[v]), Math.abs(g[v] - y[v])) : (c = ds(g, x), ds(g, y)), tf(rf, g, nf, -l * (1 - (_ = x / (x + c))))), 
                    Qd(of, of, s), Jd(of, of, a), Qd(rf, rf, s), Jd(rf, rf, a), t.bezierCurveTo(of[0], of[1], rf[0], rf[1], g[0], g[1]), 
                    tf(of, g, nf, l * _);
                } else t.lineTo(g[0], g[1]);
                d = f, f += r;
            }
            return p;
        }).apply(this, arguments);
    }
    function Pr(t, e) {
        var n = [ 1 / 0, 1 / 0 ], i = [ -1 / 0, -1 / 0 ];
        if (e) for (var o = 0; o < t.length; o++) {
            var r = t[o];
            r[0] < n[0] && (n[0] = r[0]), r[1] < n[1] && (n[1] = r[1]), r[0] > i[0] && (i[0] = r[0]), 
            r[1] > i[1] && (i[1] = r[1]);
        }
        return {
            min: e ? n : i,
            max: e ? i : n
        };
    }
    function Or(t, e) {
        if (t.length === e.length) {
            for (var n = 0; n < t.length; n++) {
                var i = t[n], o = e[n];
                if (i[0] !== o[0] || i[1] !== o[1]) return;
            }
            return 1;
        }
    }
    function Lr(t) {
        return "number" == typeof t ? t : t ? .5 : 0;
    }
    function Er(t) {
        var e, n = t.getGlobalExtent();
        return t.onBand && (e = t.getBandWidth() / 2 - 1, t = n[1] > n[0] ? 1 : -1, n[0] += t * e, 
        n[1] -= t * e), n;
    }
    function Br(t, e, n, i) {
        return "polar" === t.type ? function(t, e, n, i) {
            var o = t.getAngleAxis(), r = t.getRadiusAxis().getExtent().slice();
            r[0] > r[1] && r.reverse();
            var a = o.getExtent(), s = Math.PI / 180;
            return n && (r[0] -= .5, r[1] += .5), o = new au({
                shape: {
                    cx: ei(t.cx, 1),
                    cy: ei(t.cy, 1),
                    r0: ei(r[0], 1),
                    r: ei(r[1], 1),
                    startAngle: -a[0] * s,
                    endAngle: -a[1] * s,
                    clockwise: o.inverse
                }
            }), e && (o.shape.endAngle = -a[0] * s, Xn(o, {
                shape: {
                    endAngle: -a[1] * s
                }
            }, i)), o;
        }(t, e, n, i) : (r = e, a = n, s = i, e = Er((o = t).getAxis("x")), n = Er(o.getAxis("y")), 
        i = o.getBaseAxis().isHorizontal(), t = Math.min(e[0], e[1]), o = Math.min(n[0], n[1]), 
        e = Math.max(e[0], e[1]) - t, n = Math.max(n[0], n[1]) - o, a ? (t -= .5, e += .5, 
        o -= .5, n += .5) : (a = s.get("lineStyle.width") || 2, a = s.get("clipOverflow") ? a / 2 : Math.max(e, n), 
        i ? (o -= a, n += 2 * a) : (t -= a, e += 2 * a)), o = new cu({
            shape: {
                x: t,
                y: o,
                width: e,
                height: n
            }
        }), r && (o.shape[i ? "width" : "height"] = 0, Xn(o, {
            shape: {
                width: e,
                height: n
            }
        }, s)), o);
        var o, r, a, s;
    }
    function zr(t, e, n) {
        for (var i = "x" === (e = e.getBaseAxis()).dim || "radius" === e.dim ? 0 : 1, o = [], r = 0; r < t.length - 1; r++) {
            var a = t[r + 1], s = t[r];
            o.push(s);
            var l = [];
            switch (n) {
              case "end":
                l[i] = a[i], l[1 - i] = s[1 - i], o.push(l);
                break;

              case "middle":
                var h = (s[i] + a[i]) / 2, u = [];
                l[i] = u[i] = h, l[1 - i] = s[1 - i], u[1 - i] = a[1 - i], o.push(l), o.push(u);
                break;

              default:
                l[i] = s[i], l[1 - i] = a[1 - i], o.push(l);
            }
        }
        return t[r] && o.push(t[r]), o;
    }
    function Rr(t) {
        this._setting = t || {}, this._extent = [ 1 / 0, -1 / 0 ], this._interval = 0, this.init && this.init.apply(this, arguments);
    }
    function Nr(t) {
        this.categories = t.categories || [], this._needCollect = t.needCollect, this._deduplication = t.deduplication, 
        this._map;
    }
    function Fr(t) {
        return t._map || (t._map = L(t.categories));
    }
    function Hr(t) {
        return D(t) && null != t.value ? t.value : t + "";
    }
    function Vr(t) {
        return ni(t) + 2;
    }
    function Wr(t, e, n) {
        t[e] = Math.max(Math.min(t[e], n[1]), n[0]);
    }
    function Gr(t, e) {
        isFinite(t[0]) || (t[0] = e[0]), isFinite(t[1]) || (t[1] = e[1]), Wr(t, 0, e), Wr(t, 1, e), 
        t[0] > t[1] && (t[0] = t[1]);
    }
    function Xr(t) {
        return t.get("stack") || gf + t.seriesIndex;
    }
    function Ur(t) {
        return t.dim + t.index;
    }
    function Yr(t, e) {
        return Tf(t, Mf(e));
    }
    function qr(t, e) {
        var n, i, o, r, a, s, l = t.type, h = e.getMin(), u = e.getMax(), c = null != h, d = null != u, f = t.getExtent();
        return "ordinal" === l ? n = e.getCategories().length : (x(i = e.get("boundaryGap")) || (i = [ i || 0, i || 0 ]), 
        "boolean" == typeof i[0] && ($a && console.warn('Boolean type for boundaryGap is only allowed for ordinal axis. Please use string in percentage instead, e.g., "20%". Currently, boundaryGap is set to be 0.'), 
        i = [ 0, 0 ]), i[0] = ti(i[0], 1), i[1] = ti(i[1], 1), o = f[1] - f[0] || Math.abs(f[0])), 
        null == h && (h = "ordinal" === l ? n ? 0 : NaN : f[0] - i[0] * o), null == u && (u = "ordinal" === l ? n ? n - 1 : NaN : f[1] + i[1] * o), 
        "dataMin" === h ? h = f[0] : "function" == typeof h && (h = h({
            min: f[0],
            max: f[1]
        })), "dataMax" === u ? u = f[1] : "function" == typeof u && (u = u({
            min: f[0],
            max: f[1]
        })), null != h && isFinite(h) || (h = NaN), null != u && isFinite(u) || (u = NaN), 
        t.setBlank(p(h) || p(u) || "ordinal" === l && !t.getOrdinalMeta().categories.length), 
        e.getNeedCrossZero() && (0 < h && 0 < u && !c && (h = 0), h < 0 && u < 0 && !d && (u = 0)), 
        (d = e.ecModel) && "time" === l && (l = "bar", a = [], d.eachSeriesByType(l, function(t) {
            var e;
            !(e = t).coordinateSystem || "cartesian2d" !== e.coordinateSystem.type || (e = t).pipelineContext && e.pipelineContext.large || a.push(t);
        }), I(l = a, function(t) {
            r |= t.getBaseAxis() === e.axis;
        }), r && (s = [], I(l, function(t) {
            var e = t.getData(), n = t.coordinateSystem.getBaseAxis(), i = n.getExtent(), o = "category" === n.type ? n.getBandWidth() : Math.abs(i[1] - i[0]) / e.count(), r = ti(t.get("barWidth"), o), a = ti(t.get("barMaxWidth"), o), i = t.get("barGap"), e = t.get("barCategoryGap");
            s.push({
                bandWidth: o,
                barWidth: r,
                barMaxWidth: a,
                barGap: i,
                barCategoryGap: e,
                axisKey: Ur(n),
                stackId: Xr(t)
            });
        }), l = function() {
            var r = {};
            I(s, function(t) {
                var e = t.axisKey, n = t.bandWidth, i = r[e] || {
                    bandWidth: n,
                    remainedWidth: n,
                    autoWidthCount: 0,
                    categoryGap: "20%",
                    gap: "30%",
                    stacks: {}
                }, o = i.stacks;
                r[e] = i, o[n = t.stackId] || i.autoWidthCount++, o[n] = o[n] || {
                    width: 0,
                    maxWidth: 0
                }, (e = t.barWidth) && !o[n].width && (o[n].width = e, e = Math.min(i.remainedWidth, e), 
                i.remainedWidth -= e), (e = t.barMaxWidth) && (o[n].maxWidth = e), null != (e = t.barGap) && (i.gap = e), 
                null != (t = t.barCategoryGap) && (i.categoryGap = t);
            });
            var c = {};
            return I(r, function(t, n) {
                c[n] = {};
                var e = t.stacks, i = t.bandWidth, i = ti(t.categoryGap, i), o = ti(t.gap, 1), r = t.remainedWidth, a = t.autoWidthCount, s = (r - i) / (a + (a - 1) * o), s = Math.max(s, 0);
                I(e, function(t) {
                    var e = t.maxWidth;
                    e && e < s && (e = Math.min(e, r), t.width && (e = Math.min(e, t.width)), r -= e, 
                    t.width = e, a--);
                }), s = (r - i) / (a + (a - 1) * o), s = Math.max(s, 0);
                var l, h = 0;
                I(e, function(t) {
                    t.width || (t.width = s), h += (l = t).width * (1 + o);
                }), l && (h -= l.width * o);
                var u = -h / 2;
                I(e, function(t, e) {
                    c[n][e] = c[n][e] || {
                        offset: u,
                        width: t.width
                    }, u += t.width * (1 + o);
                });
            }), c;
        }(), h = (l = function(t, e, n, i) {
            var o = (o = n.axis.getExtent())[1] - o[0];
            if (void 0 === (i = function(t, e, n) {
                if (t && e) return null != (e = t[Ur(e)]) && null != n && (e = e[Xr(n)]), e;
            }(i, n.axis))) return {
                min: t,
                max: e
            };
            var r = 1 / 0;
            I(i, function(t) {
                r = Math.min(t.offset, r);
            });
            var a = -1 / 0;
            return I(i, function(t) {
                a = Math.max(t.offset + t.width, a);
            }), r = Math.abs(r), a = Math.abs(a), {
                min: t -= r / (n = r + a) * (i = (i = e - t) / (1 - (r + a) / o) - i),
                max: e += a / n * i
            };
        }(h, u, e, l)).min, u = l.max)), [ h, u ];
    }
    function jr(t, e) {
        var n = qr(t, e), i = null != e.getMin(), o = null != e.getMax(), r = e.get("splitNumber");
        "log" === t.type && (t.base = e.get("logBase"));
        var a = t.type;
        t.setExtent(n[0], n[1]), t.niceExtent({
            splitNumber: r,
            fixMin: i,
            fixMax: o,
            minInterval: "interval" === a || "time" === a ? e.get("minInterval") : null,
            maxInterval: "interval" === a || "time" === a ? e.get("maxInterval") : null
        }), null != (e = e.get("interval")) && t.setInterval && t.setInterval(e);
    }
    function Zr(n) {
        var e, i = n.getLabelModel().get("formatter"), o = "category" === n.type ? n.scale.getExtent()[0] : null;
        return "string" == typeof i ? (e = i, i = function(t) {
            return t = n.scale.getLabel(t), e.replace("{value}", null != t ? t : "");
        }) : "function" == typeof i ? function(t, e) {
            return null != o && (e = t - o), i(Kr(n, t), e);
        } : function(t) {
            return n.scale.getLabel(t);
        };
    }
    function Kr(t, e) {
        return "category" === t.type ? t.scale.getLabel(e) : e;
    }
    function $r(t) {
        return null == (t = t.get("interval")) ? "auto" : t;
    }
    function Qr(t) {
        return "category" === t.type && 0 === $r(t.getLabelModel());
    }
    function Jr(t) {
        return this._axes[t];
    }
    function ta(t) {
        Pf.call(this, t);
    }
    function ea(t, e) {
        var n, i = na(t, "labels"), o = $r(e);
        return (e = ia(i, o)) || oa(i, o, {
            labels: f(o) ? aa(t, o) : ra(t, n = "auto" === o ? null != (t = Lf(n = t).autoInterval) ? t : Lf(n).autoInterval = n.calculateCategoryInterval() : o),
            labelCategoryInterval: n
        });
    }
    function na(t, e) {
        return Lf(t)[e] || (Lf(t)[e] = []);
    }
    function ia(t, e) {
        for (var n = 0; n < t.length; n++) if (t[n].key === e) return t[n].value;
    }
    function oa(t, e, n) {
        return t.push({
            key: e,
            value: n
        }), n;
    }
    function ra(t, e, n) {
        function i(t) {
            l.push(n ? t : {
                formattedLabel: o(t),
                rawLabel: r.getLabel(t),
                tickValue: t
            });
        }
        var o = Zr(t), r = t.scale, a = r.getExtent(), s = t.getLabelModel(), l = [], h = Math.max((e || 0) + 1, 1), u = a[0], e = r.count();
        0 !== u && 1 < h && 2 < e / h && (u = Math.round(Math.ceil(u / h) * h)), e = Qr(t), 
        t = s.get("showMinLabel") || e, e = s.get("showMaxLabel") || e, t && u !== a[0] && i(a[0]);
        for (var c = u; c <= a[1]; c += h) i(c);
        return e && c - h !== a[1] && i(a[1]), l;
    }
    function aa(t, n, i) {
        var o = t.scale, r = Zr(t), a = [];
        return I(o.getTicks(), function(t) {
            var e = o.getLabel(t);
            n(t, e) && a.push(i ? t : {
                formattedLabel: r(t),
                rawLabel: e,
                tickValue: t
            });
        }), a;
    }
    function sa(t, e) {
        e = (t[1] - t[0]) / e / 2, t[0] += e, t[1] -= e;
    }
    function la(t, e) {
        return e.type || (e.data ? "category" : "value");
    }
    function ha(t, e) {
        return t.getCoordSysModel() === e;
    }
    function ua(t, e, n) {
        this._coordsMap = {}, this._coordsList = [], this._axesMap = {}, this._axesList = [], 
        this._initCartesian(t, e, n), this.model = t;
    }
    function ca(t, e, n, i) {
        function o(t) {
            return t.dim + "_" + t.index;
        }
        n.getAxesOnZeroOf = function() {
            return r ? [ r ] : [];
        };
        var r, a = t[e], n = (e = n.model).get("axisLine.onZero"), e = e.get("axisLine.onZeroAxisIndex");
        if (n) {
            if (null != e) da(a[e]) && (r = a[e]); else for (var s in a) if (a.hasOwnProperty(s) && da(a[s]) && !i[o(a[s])]) {
                r = a[s];
                break;
            }
            r && (i[o(r)] = !0);
        }
    }
    function da(t) {
        return t && "category" !== t.type && "time" !== t.type && (e = (t = (e = t).scale.getExtent())[0], 
        t = t[1], !(0 < e && 0 < t || e < 0 && t < 0));
        var e;
    }
    function fa(n) {
        return b(Ff, function(t) {
            var e = n.getReferringComponents(t)[0];
            if ($a && !e) throw new Error(t + ' "' + _(n.get(t + "Index"), n.get(t + "Id"), 0) + '" not found');
            return e;
        });
    }
    function pa(t) {
        return "cartesian2d" === t.get("coordinateSystem");
    }
    function ga(t) {
        t && (t.ignore = !0);
    }
    function ma(t, e) {
        var n = t && t.getBoundingRect().clone(), i = e && e.getBoundingRect().clone();
        if (n && i) {
            var o = tt([]);
            return it(o, o, -t.rotation), n.applyTransform(et([], o, t.getLocalTransform())), 
            i.applyTransform(et([], o, e.getLocalTransform())), n.intersect(i);
        }
    }
    function ya(t) {
        return "middle" === t || "center" === t;
    }
    function va(t, e) {
        var m, n = {
            axesInfo: {},
            seriesInvolved: !1,
            coordSysAxesInfo: {},
            coordSysMap: {}
        }, y = n, o = (m = t).getComponent("tooltip"), v = m.getComponent("axisPointer"), _ = v.get("link", !0) || [], x = [];
        return Yf(e.getCoordinateSystems(), function(f) {
            function t(t, e, r) {
                var n, i, o, a, s, l, h, u, c = r.model.getModel("axisPointer", v), d = c.get("show");
                d && ("auto" !== d || t || wa(c)) && (null == e && (e = c.get("triggerTooltip")), 
                a = (c = t ? (n = r, o = v, a = m, s = t, l = e, h = (i = g).getModel("axisPointer"), 
                u = {}, Yf([ "type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z" ], function(t) {
                    u[t] = S(h.get(t));
                }), u.snap = "category" !== n.type && !!l, "cross" === h.get("type") && (u.type = "line"), 
                null == (i = u.label || (u.label = {})).show && (i.show = !1), "cross" === s && (s = h.get("label.show"), 
                i.show = null == s || s, l || (l = u.lineStyle = h.get("crossStyle")) && T(i, l.textStyle)), 
                n.model.getModel("axisPointer", new Zn(u, o, a))) : c).get("snap"), d = ba(r.model), 
                t = e || a || "category" === r.type, c = y.axesInfo[d] = {
                    key: d,
                    axis: r,
                    coordSys: f,
                    axisPointerModel: c,
                    triggerTooltip: e,
                    involveSeries: t,
                    snap: a,
                    useHandle: wa(c),
                    seriesModels: []
                }, p[d] = c, y.seriesInvolved |= t, null != (t = function(t) {
                    for (var e = r.model, n = r.dim, i = 0; i < t.length; i++) {
                        var o = t[i] || {};
                        if (_a(o[n + "AxisId"], e.id) || _a(o[n + "AxisIndex"], e.componentIndex) || _a(o[n + "AxisName"], e.name)) return i;
                    }
                }(_)) && ((r = x[t] || (x[t] = {
                    axesInfo: {}
                })).axesInfo[d] = c, r.mapper = _[t].mapper, c.linkGroup = r));
            }
            var p, g, e, n, i;
            f.axisPointerEnabled && (i = ba(f.model), p = y.coordSysAxesInfo[i] = {}, g = (y.coordSysMap[i] = f).model.getModel("tooltip", o), 
            Yf(f.getAxes(), qf(t, !1, null)), f.getTooltipAxes && o && g.get("show") && (e = "axis" === g.get("trigger"), 
            n = "cross" === g.get("axisPointer.type"), i = f.getTooltipAxes(g.get("axisPointer.axis")), 
            (e || n) && Yf(i.baseAxes, qf(t, !n || "cross", e)), n && Yf(i.otherAxes, qf(t, "cross", !1))));
        }), n.seriesInvolved && function(o) {
            t.eachSeries(function(n) {
                var i = n.coordinateSystem, t = n.get("tooltip.trigger", !0), e = n.get("tooltip.show", !0);
                i && "none" !== t && !1 !== t && "item" !== t && !1 !== e && !1 !== n.get("axisPointer.show", !0) && Yf(o.coordSysAxesInfo[ba(i.model)], function(t) {
                    var e = t.axis;
                    i.getAxis(e.dim) === e && (t.seriesModels.push(n), null == t.seriesDataCount && (t.seriesDataCount = 0), 
                    t.seriesDataCount += n.getData().count());
                });
            }, this);
        }(n), n;
    }
    function _a(t, e) {
        return "all" === t || x(t) && 0 <= m(t, e) || t === e;
    }
    function xa(t) {
        var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo;
        return e && e.axesInfo[ba(t)];
    }
    function wa(t) {
        return !!t.get("handle.show");
    }
    function ba(t) {
        return t.type + "||" + t.id;
    }
    function Sa(t, e, n, i, o, r) {
        var a, s = jf.getAxisPointerClass(t.axisPointerClass);
        s && ((a = (a = xa(a = e)) && a.axisPointerModel) ? (t._axisPointer || (t._axisPointer = new s())).render(e, a, i, r) : Ma(t, i));
    }
    function Ma(t, e, n) {
        var i = t._axisPointer;
        i && i.dispose(e, n), t._axisPointer = null;
    }
    function Ta(t, e, n) {
        n = n || {};
        var i = t.coordinateSystem, o = {}, r = (h = e.axis).getAxesOnZeroOf()[0], a = h.position, s = r ? "onZero" : a, l = h.dim, t = [ (u = i.getRect()).x, u.x + u.width, u.y, u.y + u.height ], h = {
            left: 0,
            right: 1,
            top: 0,
            bottom: 1,
            onZero: 2
        }, i = e.get("offset") || 0, u = "x" === l ? [ t[2] - i, t[3] + i ] : [ t[0] - i, t[1] + i ];
        return r && (i = r.toGlobalCoord(r.dataToCoord(0)), u[h.onZero] = Math.max(Math.min(i, u[1]), u[0])), 
        o.position = [ "y" === l ? u[h[s]] : t[0], "x" === l ? u[h[s]] : t[3] ], o.rotation = Math.PI / 2 * ("x" === l ? 0 : 1), 
        o.labelDirection = o.tickDirection = o.nameDirection = {
            top: -1,
            bottom: 1,
            left: -1,
            right: 1
        }[a], o.labelOffset = r ? u[h[a]] - u[h.onZero] : 0, e.get("axisTick.inside") && (o.tickDirection = -o.tickDirection), 
        _(n.labelInside, e.get("axisLabel.inside")) && (o.labelDirection = -o.labelDirection), 
        e = e.get("axisLabel.rotate"), o.labelRotate = "top" === s ? -e : e, o.z2 = 1, o;
    }
    function Ia(t, e, n, i, o) {
        var r, a, s, l, h, u, c, d = t.axis;
        if (!d.scale.isBlank() && d.containData(e)) {
            if (!t.involveSeries) return n.showPointer(t, e), 0;
            var f = (r = e, a = (g = t).axis, s = a.dim, l = r, h = [], u = Number.MAX_VALUE, 
            c = -1, tp(g.seriesModels, function(e) {
                var t = e.getData().mapDimension(s, !0);
                if (e.getAxisTooltipData) var n = e.getAxisTooltipData(t, r, a), i = n.dataIndices, o = n.nestestValue; else {
                    if (!(i = e.getData().indicesOfNearest(t[0], r, "category" === a.type ? .5 : null)).length) return;
                    o = e.getData().get(t[0], i[0]);
                }
                null != o && isFinite(o) && (n = r - o, (t = Math.abs(n)) <= u && ((t < u || 0 <= n && c < 0) && (u = t, 
                c = n, l = o, h.length = 0), tp(i, function(t) {
                    h.push({
                        seriesIndex: e.seriesIndex,
                        dataIndexInside: t,
                        dataIndex: e.getData().getRawIndex(t)
                    });
                })));
            }), {
                payloadBatch: h,
                snapToValue: l
            }), p = f.payloadBatch, g = f.snapToValue;
            p[0] && null == o.seriesIndex && M(o, p[0]), !i && t.snap && d.containData(g) && null != g && (e = g), 
            n.showPointer(t, e, p, o), n.showTooltip(t, f, g);
        }
    }
    function Ca(t, e, n, i) {
        t[e.key] = {
            value: n,
            payloadBatch: i
        };
    }
    function Da(t, e, n, i) {
        var o, r = n.payloadBatch, a = e.axis, s = a.model, l = e.axisPointerModel;
        e.triggerTooltip && r.length && (n = ba(o = e.coordSys.model), (e = t.map[n]) || (e = t.map[n] = {
            coordSysId: o.id,
            coordSysIndex: o.componentIndex,
            coordSysType: o.type,
            coordSysMainType: o.mainType,
            dataByAxis: []
        }, t.list.push(e)), e.dataByAxis.push({
            axisDim: a.dim,
            axisIndex: s.componentIndex,
            axisType: s.type,
            axisId: s.id,
            value: i,
            valueLabelOpt: {
                precision: l.get("label.precision"),
                formatter: l.get("label.formatter")
            },
            seriesDataIndices: r.slice()
        }));
    }
    function ka(t) {
        var e = t.axis.model, n = {}, t = n.axisDim = t.axis.dim;
        return n.axisIndex = n[t + "AxisIndex"] = e.componentIndex, n.axisName = n[t + "AxisName"] = e.name, 
        n.axisId = n[t + "AxisId"] = e.id, n;
    }
    function Aa(t) {
        return !t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1]);
    }
    function Pa(t, e, n) {
        var i, u, c;
        function o(t, h) {
            u.on(t, function(e) {
                var i, o, t, n, r, a, s, l = (i = c, {
                    dispatchAction: function t(e) {
                        var n = o[e.type];
                        n ? n.push(e) : (e.dispatchAction = t, i.dispatchAction(e));
                    },
                    pendings: o = {
                        showTip: [],
                        hideTip: []
                    }
                });
                op(ip(u).records, function(t) {
                    t && h(t, e, l.dispatchAction);
                }), n = c, a = (t = l.pendings).showTip.length, s = t.hideTip.length, a ? r = t.showTip[a - 1] : s && (r = t.hideTip[s - 1]), 
                r && (r.dispatchAction = null, n.dispatchAction(r));
            });
        }
        ts.node || (i = e.getZr(), ip(i).records || (ip(i).records = {}), c = e, ip(u = i).initialized || (ip(u).initialized = !0, 
        o("click", s(La, "click")), o("mousemove", s(La, "mousemove")), o("globalout", Oa)), 
        (ip(i).records[t] || (ip(i).records[t] = {})).handler = n);
    }
    function Oa(t, e, n) {
        t.handler("leave", null, n);
    }
    function La(t, e, n, i) {
        e.handler(t, n, i);
    }
    function Ea(t, e) {
        ts.node || (e = e.getZr(), (ip(e).records || {})[t] && (ip(e).records[t] = null));
    }
    function Ba() {}
    function za(t, e, n, i) {
        !function n(i, t) {
            if (D(i) && D(t)) {
                var o = !0;
                return I(t, function(t, e) {
                    o = o && n(i[e], t);
                }), !!o;
            }
            return i === t;
        }(ap(n).lastProp, i) && (ap(n).lastProp = i, e ? Gn(n, i, t) : (n.stopAnimation(), 
        n.attr(i)));
    }
    function Ra(t, e) {
        t[e.get("label.show") ? "show" : "hide"]();
    }
    function Na(t) {
        return {
            position: t.position.slice(),
            rotation: t.rotation || 0
        };
    }
    function Fa(t, e, n) {
        var i = e.get("z"), o = e.get("zlevel");
        t && t.traverse(function(t) {
            "group" !== t.type && (null != i && (t.z = i), null != o && (t.zlevel = o), t.silent = n);
        });
    }
    function Ha(t, e, n, i, o) {
        t = e.scale.parse(t);
        var r, a = e.scale.getLabel(t, {
            precision: o.precision
        });
        return (o = o.formatter) && (r = {
            value: Kr(e, t),
            axisDimension: e.dim,
            axisIndex: e.index,
            seriesData: []
        }, I(i, function(t) {
            var e = n.getSeriesByIndex(t.seriesIndex), t = t.dataIndexInside;
            (t = e && e.getDataParams(t)) && r.seriesData.push(t);
        }), C(o) ? a = o.replace("{value}", a) : f(o) && (a = o(r))), a;
    }
    function Va(t, e, n) {
        var i = J();
        return it(i, i, n.rotation), nt(i, i, n.position), Un([ t.dataToCoord(e), (n.labelOffset || 0) + (n.labelDirection || 1) * (n.labelMargin || 0) ], i);
    }
    function Wa(t, e) {
        var n = {};
        return n[e.dim + "AxisIndex"] = e.index, t.getCartesian(n);
    }
    function Ga(t) {
        return "x" === t.dim ? 0 : 1;
    }
    function Xa(n, t) {
        if (ts.wxa) return null;
        var e = document.createElement("div"), i = this._zr = t.getZr();
        this.el = e, this._x = t.getWidth() / 2, this._y = t.getHeight() / 2, n.appendChild(e), 
        this._container = n, this._show = !1, this._hideTimeout;
        var o = this;
        e.onmouseenter = function() {
            o._enterable && (clearTimeout(o._hideTimeout), o._show = !0), o._inContent = !0;
        }, e.onmousemove = function(t) {
            var e;
            t = t || window.event, o._enterable || (e = i.handler, Z(n, t, !0), e.dispatch("mousemove", t));
        }, e.onmouseleave = function() {
            o._enterable && o._show && o.hideLater(o._hideDelay), o._inContent = !1;
        };
    }
    function Ua(t) {
        this._zr = t.getZr(), this._show = !1, this._hideTimeout;
    }
    function Ya(t) {
        for (var e = t.pop(); t.length; ) {
            var n = t.pop();
            n && (Zn.isInstance(n) && (n = n.get("tooltip", !0)), "string" == typeof n && (n = {
                formatter: n
            }), e = new Zn(n, e, e.ecModel));
        }
        return e;
    }
    function qa(t, e) {
        return t.dispatchAction || v(e.dispatchAction, e);
    }
    function ja(t) {
        return "center" === t || "middle" === t;
    }
    function Za() {
        return hs.createCanvas();
    }
    "undefined" != typeof window ? Du = window.__DEV__ : "undefined" != typeof global && (Du = global.__DEV__), 
    void 0 === Du && (Du = !0);
    var Ka, $a = Du, Qa = 2311, Ja = function() {
        return Qa++;
    }, ts = "object" == ("undefined" == typeof wx ? "undefined" : _typeof(wx)) && "function" == typeof wx.getSystemInfoSync ? {
        browser: {},
        os: {},
        node: !1,
        wxa: !0,
        canvasSupported: !0,
        svgSupported: !1,
        touchEventsSupported: !0,
        domSupported: !1
    } : "undefined" == typeof document && "undefined" != typeof self ? {
        browser: {},
        os: {},
        node: !1,
        worker: !0,
        canvasSupported: !0,
        domSupported: !1
    } : "undefined" == typeof navigator ? {
        browser: {},
        os: {},
        node: !0,
        worker: !1,
        canvasSupported: !0,
        svgSupported: !0,
        domSupported: !1
    } : (lu = {}, Bu = (su = navigator.userAgent).match(/Firefox\/([\d.]+)/), ku = su.match(/MSIE\s([\d.]+)/) || su.match(/Trident\/.+?rv:(([\d.]+))/), 
    iu = su.match(/Edge\/([\d.]+)/), su = /micromessenger/i.test(su), Bu && (lu.firefox = !0, 
    lu.version = Bu[1]), ku && (lu.ie = !0, lu.version = ku[1]), iu && (lu.edge = !0, 
    lu.version = iu[1]), su && (lu.weChat = !0), {
        browser: lu,
        os: {},
        node: !1,
        canvasSupported: !!document.createElement("canvas").getContext,
        svgSupported: "undefined" != typeof SVGRect,
        touchEventsSupported: "ontouchstart" in window && !lu.ie && !lu.edge,
        pointerEventsSupported: "onpointerdown" in window && (lu.edge || lu.ie && 11 <= lu.version),
        domSupported: "undefined" != typeof document
    }), es = {
        "[object Function]": 1,
        "[object RegExp]": 1,
        "[object Date]": 1,
        "[object Error]": 1,
        "[object CanvasGradient]": 1,
        "[object CanvasPattern]": 1,
        "[object Image]": 1,
        "[object Canvas]": 1
    }, ns = {
        "[object Int8Array]": 1,
        "[object Uint8Array]": 1,
        "[object Uint8ClampedArray]": 1,
        "[object Int16Array]": 1,
        "[object Uint16Array]": 1,
        "[object Int32Array]": 1,
        "[object Uint32Array]": 1,
        "[object Float32Array]": 1,
        "[object Float64Array]": 1
    }, is = Object.prototype.toString, os = ($u = Array.prototype).forEach, rs = $u.filter, as = $u.slice, ss = $u.map, ls = $u.reduce, hs = {
        createCanvas: function() {
            return document.createElement("canvas");
        }
    }, us = "__ec_primitive__";
    P.prototype = {
        constructor: P,
        get: function(t) {
            return this.data.hasOwnProperty(t) ? this.data[t] : null;
        },
        set: function(t, e) {
            return this.data[t] = e;
        },
        each: function(t, e) {
            for (var n in void 0 !== e && (t = v(t, e)), this.data) this.data.hasOwnProperty(n) && t(this.data[n], n);
        },
        removeKey: function(t) {
            delete this.data[t];
        }
    };
    var cs = "undefined" == typeof Float32Array ? Array : Float32Array, ds = F, fs = function(t, e) {
        return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]);
    };
    G.prototype = {
        constructor: G,
        _dragStart: function(t) {
            var e = t.target;
            e && e.draggable && ((this._draggingTarget = e).dragging = !0, this._x = t.offsetX, 
            this._y = t.offsetY, this.dispatchToElement(X(e, t), "dragstart", t.event));
        },
        _drag: function(t) {
            var e, n, i, o, r = this._draggingTarget;
            r && (i = t.offsetX, o = t.offsetY, e = i - this._x, n = o - this._y, this._x = i, 
            this._y = o, r.drift(e, n, t), this.dispatchToElement(X(r, t), "drag", t.event), 
            i = this.findHover(i, o, r).target, o = this._dropTarget, r !== (this._dropTarget = i) && (o && i !== o && this.dispatchToElement(X(o, t), "dragleave", t.event), 
            i && i !== o && this.dispatchToElement(X(i, t), "dragenter", t.event)));
        },
        _dragEnd: function(t) {
            var e = this._draggingTarget;
            e && (e.dragging = !1), this.dispatchToElement(X(e, t), "dragend", t.event), this._dropTarget && this.dispatchToElement(X(this._dropTarget, t), "drop", t.event), 
            this._draggingTarget = null, this._dropTarget = null;
        }
    };
    var ps = Array.prototype.slice, gs = function(t) {
        this._$handlers = {}, this._$eventProcessor = t;
    };
    function ms() {
        this._track = [];
    }
    gs.prototype = {
        constructor: gs,
        one: function(t, e, n, i) {
            return U(this, t, e, n, i, !0);
        },
        on: function(t, e, n, i) {
            return U(this, t, e, n, i, !1);
        },
        isSilent: function(t) {
            var e = this._$handlers;
            return !e[t] || !e[t].length;
        },
        off: function(t, e) {
            var n = this._$handlers;
            if (!t) return this._$handlers = {}, this;
            if (e) {
                if (n[t]) {
                    for (var i = [], o = 0, r = n[t].length; o < r; o++) n[t][o].h !== e && i.push(n[t][o]);
                    n[t] = i;
                }
                n[t] && 0 === n[t].length && delete n[t];
            } else delete n[t];
            return this;
        },
        trigger: function(t) {
            var e = this._$handlers[t], n = this._$eventProcessor;
            if (e) {
                var i = arguments, o = i.length;
                3 < o && (i = ps.call(i, 1));
                for (var r = e.length, a = 0; a < r; ) {
                    var s = e[a];
                    if (n && n.filter && null != s.query && !n.filter(t, s.query)) a++; else {
                        switch (o) {
                          case 1:
                            s.h.call(s.ctx);
                            break;

                          case 2:
                            s.h.call(s.ctx, i[1]);
                            break;

                          case 3:
                            s.h.call(s.ctx, i[1], i[2]);
                            break;

                          default:
                            s.h.apply(s.ctx, i);
                        }
                        s.one ? (e.splice(a, 1), r--) : a++;
                    }
                }
            }
            return n && n.afterTrigger && n.afterTrigger(t), this;
        },
        triggerWithContext: function(t) {
            var e = this._$handlers[t], n = this._$eventProcessor;
            if (e) {
                var i = arguments, o = i.length;
                4 < o && (i = ps.call(i, 1, i.length - 1));
                for (var r = i[i.length - 1], a = e.length, s = 0; s < a; ) {
                    var l = e[s];
                    if (n && n.filter && null != l.query && !n.filter(t, l.query)) s++; else {
                        switch (o) {
                          case 1:
                            l.h.call(r);
                            break;

                          case 2:
                            l.h.call(r, i[1]);
                            break;

                          case 3:
                            l.h.call(r, i[1], i[2]);
                            break;

                          default:
                            l.h.apply(r, i);
                        }
                        l.one ? (e.splice(s, 1), a--) : s++;
                    }
                }
            }
            return n && n.afterTrigger && n.afterTrigger(t), this;
        }
    };
    var ys = Math.log(2), vs = "undefined" != typeof window && !!window.addEventListener, _s = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, xs = "___zrEVENTSAVED", ws = [], bs = vs ? function(t) {
        t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0;
    } : function(t) {
        t.returnValue = !1, t.cancelBubble = !0;
    };
    ms.prototype = {
        constructor: ms,
        recognize: function(t, e, n) {
            return this._doTrack(t, e, n), this._recognize(t);
        },
        clear: function() {
            return this._track.length = 0, this;
        },
        _doTrack: function(t, e, n) {
            var i = t.touches;
            if (i) {
                for (var o = {
                    points: [],
                    touches: [],
                    target: e,
                    event: t
                }, r = 0, a = i.length; r < a; r++) {
                    var s = i[r], l = q(n, s, {});
                    o.points.push([ l.zrX, l.zrY ]), o.touches.push(s);
                }
                this._track.push(o);
            }
        },
        _recognize: function(t) {
            for (var e in Ss) if (Ss.hasOwnProperty(e)) {
                var n = Ss[e](this._track, t);
                if (n) return n;
            }
        }
    };
    var Ss = {
        pinch: function(t, e) {
            if (n = t.length) {
                var n, i = (t[n - 1] || {}).points;
                if ((n = (t[n - 2] || {}).points || i) && 1 < n.length && i && 1 < i.length) return n = K(i) / K(n), 
                isFinite(n) || (n = 1), e.pinchScale = n, i = [ (i[0][0] + i[1][0]) / 2, (i[0][1] + i[1][1]) / 2 ], 
                e.pinchX = i[0], e.pinchY = i[1], {
                    type: "pinch",
                    target: t[0].target,
                    event: e
                };
            }
        }
    };
    function Ms(t, e, n, i) {
        gs.call(this), this.storage = t, this.painter = e, this.painterRoot = i, n = n || new Q(), 
        this.proxy = null, this._hovered = {}, this._lastTouchMoment, this._lastX, this._lastY, 
        this._gestureMgr, G.call(this), this.setHandlerProxy(n);
    }
    Q.prototype.dispose = function() {};
    var Ts = [ "click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu" ];
    Ms.prototype = {
        constructor: Ms,
        setHandlerProxy: function(e) {
            this.proxy && this.proxy.dispose(), e && (I(Ts, function(t) {
                e.on && e.on(t, this[t], this);
            }, this), e.handler = this), this.proxy = e;
        },
        mousemove: function(t) {
            var e = t.zrX, n = t.zrY, i = this._hovered, o = i.target;
            o && !o.__zr && (o = (i = this.findHover(i.x, i.y)).target);
            var r = this._hovered = this.findHover(e, n), e = r.target;
            (n = this.proxy).setCursor && n.setCursor(e ? e.cursor : "default"), o && e !== o && this.dispatchToElement(i, "mouseout", t), 
            this.dispatchToElement(r, "mousemove", t), e && e !== o && this.dispatchToElement(r, "mouseover", t);
        },
        mouseout: function(t) {
            this.dispatchToElement(this._hovered, "mouseout", t);
            for (var e, n = t.toElement || t.relatedTarget; (n = n && n.parentNode) && 9 !== n.nodeType && !(e = n === this.painterRoot); ) ;
            e || this.trigger("globalout", {
                event: t
            });
        },
        resize: function() {
            this._hovered = {};
        },
        dispatch: function(t, e) {
            (t = this[t]) && t.call(this, e);
        },
        dispose: function() {
            this.proxy.dispose(), this.storage = this.proxy = this.painter = null;
        },
        setCursorStyle: function(t) {
            var e = this.proxy;
            e.setCursor && e.setCursor(t);
        },
        dispatchToElement: function(t, e, n) {
            var i = (t = t || {}).target;
            if (!i || !i.silent) {
                for (var o = "on" + e, r = {
                    type: e,
                    event: n,
                    target: t.target,
                    topTarget: t.topTarget,
                    cancelBubble: !1,
                    offsetX: n.zrX,
                    offsetY: n.zrY,
                    gestureEvent: n.gestureEvent,
                    pinchX: n.pinchX,
                    pinchY: n.pinchY,
                    pinchScale: n.pinchScale,
                    wheelDelta: n.zrDelta,
                    zrByTouch: n.zrByTouch,
                    which: n.which,
                    stop: $
                }; i && (i[o] && (r.cancelBubble = i[o].call(i, r)), i.trigger(e, r), i = i.parent, 
                !r.cancelBubble); ) ;
                r.cancelBubble || (this.trigger(e, r), this.painter && this.painter.eachOtherLayer(function(t) {
                    "function" == typeof t[o] && t[o].call(t, r), t.trigger && t.trigger(e, r);
                }));
            }
        },
        findHover: function(t, e, n) {
            for (var i, o = this.storage.getDisplayList(), r = {
                x: t,
                y: e
            }, a = o.length - 1; 0 <= a; a--) if (o[a] !== n && !o[a].ignore && (i = function(t, e, n) {
                if (t[t.rectHover ? "rectContain" : "contain"](e, n)) {
                    for (var i, o = t; o; ) {
                        if (o.clipPath && !o.clipPath.contain(e, n)) return !1;
                        o.silent && (i = !0), o = o.parent;
                    }
                    return !i || "silent";
                }
                return !1;
            }(o[a], t, e)) && (r.topTarget || (r.topTarget = o[a]), "silent" !== i)) {
                r.target = o[a];
                break;
            }
            return r;
        },
        processGesture: function(t, e) {
            this._gestureMgr || (this._gestureMgr = new ms());
            var n = this._gestureMgr;
            "start" === e && n.clear();
            var i = n.recognize(t, this.findHover(t.zrX, t.zrY, null).target, this.proxy.dom);
            "end" === e && n.clear(), i && (n = i.type, t.gestureEvent = n, this.dispatchToElement({
                target: i.target
            }, n, i.event));
        }
    }, I([ "click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu" ], function(i) {
        Ms.prototype[i] = function(t) {
            var e = this.findHover(t.zrX, t.zrY), n = e.target;
            if ("mousedown" === i) this._downEl = n, this._downPoint = [ t.zrX, t.zrY ], this._upEl = n; else if ("mouseup" === i) this._upEl = n; else if ("click" === i) {
                if (this._downEl !== this._upEl || !this._downPoint || 4 < ds(this._downPoint, [ t.zrX, t.zrY ])) return;
                this._downPoint = null;
            }
            this.dispatchToElement(e, i, t);
        };
    }), e(Ms, gs), e(Ms, G);
    var Is = "undefined" == typeof Float32Array ? Array : Float32Array, Cs = tt, Ds = function(t) {
        (t = t || {}).position || (this.position = [ 0, 0 ]), null == t.rotation && (this.rotation = 0), 
        t.scale || (this.scale = [ 1, 1 ]), this.origin = this.origin || null;
    };
    ($l = Ds.prototype).transform = null, $l.needLocalTransform = function() {
        return at(this.rotation) || at(this.position[0]) || at(this.position[1]) || at(this.scale[0] - 1) || at(this.scale[1] - 1);
    };
    var ks = [];
    $l.updateTransform = function() {
        var t, e, n = this.parent, i = n && n.transform, o = this.needLocalTransform(), r = this.transform;
        o || i ? (r = r || J(), o ? this.getLocalTransform(r) : Cs(r), i && (o ? et(r, n.transform, r) : (e = r, 
        t = n.transform, e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e[4] = t[4], 
        e[5] = t[5])), this.transform = r, null != (n = this.globalScaleRatio) && 1 !== n && (this.getGlobalScale(ks), 
        t = ((ks[0] - (e = ks[0] < 0 ? -1 : 1)) * n + e) / ks[0] || 0, e = ((ks[1] - (e = ks[1] < 0 ? -1 : 1)) * n + e) / ks[1] || 0, 
        r[0] *= t, r[1] *= t, r[2] *= e, r[3] *= e), this.invTransform = this.invTransform || J(), 
        rt(this.invTransform, r)) : r && Cs(r);
    }, $l.getLocalTransform = function(t) {
        return Ds.getLocalTransform(this, t);
    }, $l.setTransform = function(t) {
        var e = this.transform, n = t.dpr || 1;
        e ? t.setTransform(n * e[0], n * e[1], n * e[2], n * e[3], n * e[4], n * e[5]) : t.setTransform(n, 0, 0, n, 0, 0);
    }, $l.restoreTransform = function(t) {
        var e = t.dpr || 1;
        t.setTransform(e, 0, 0, e, 0, 0);
    };
    var As = [], Ps = J();
    $l.setLocalTransform = function(t) {
        var e, n, i, o;
        t && (e = t[0] * t[0] + t[1] * t[1], n = t[2] * t[2] + t[3] * t[3], i = this.position, 
        o = this.scale, at(e - 1) && (e = Math.sqrt(e)), at(n - 1) && (n = Math.sqrt(n)), 
        t[0] < 0 && (e = -e), t[3] < 0 && (n = -n), i[0] = t[4], i[1] = t[5], o[0] = e, 
        o[1] = n, this.rotation = Math.atan2(-t[1] / n, t[0] / e));
    }, $l.decomposeTransform = function() {
        var t, e;
        this.transform && (e = this.parent, t = this.transform, e && e.transform && (et(As, e.invTransform, t), 
        t = As), (e = this.origin) && (e[0] || e[1]) && (Ps[4] = e[0], Ps[5] = e[1], et(As, t, Ps), 
        As[4] -= e[0], As[5] -= e[1], t = As), this.setLocalTransform(t));
    }, $l.getGlobalScale = function(t) {
        var e = this.transform;
        return t = t || [], e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]), 
        e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1])) : (t[0] = 1, t[1] = 1), 
        t;
    }, $l.transformCoordToLocal = function(t, e) {
        return t = [ t, e ], (e = this.invTransform) && H(t, t, e), t;
    }, $l.transformCoordToGlobal = function(t, e) {
        return t = [ t, e ], (e = this.transform) && H(t, t, e), t;
    }, Ds.getLocalTransform = function(t, e) {
        Cs(e = e || []);
        var n = t.origin, i = t.scale || [ 1, 1 ], o = t.rotation || 0, t = t.position || [ 0, 0 ];
        return n && (e[4] -= n[0], e[5] -= n[1]), ot(e, e, i), o && it(e, e, o), n && (e[4] += n[0], 
        e[5] += n[1]), e[4] += t[0], e[5] += t[1], e;
    };
    var Os = {
        linear: function(t) {
            return t;
        },
        quadraticIn: function(t) {
            return t * t;
        },
        quadraticOut: function(t) {
            return t * (2 - t);
        },
        quadraticInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1);
        },
        cubicIn: function(t) {
            return t * t * t;
        },
        cubicOut: function(t) {
            return --t * t * t + 1;
        },
        cubicInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2);
        },
        quarticIn: function(t) {
            return t * t * t * t;
        },
        quarticOut: function(t) {
            return 1 - --t * t * t * t;
        },
        quarticInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2);
        },
        quinticIn: function(t) {
            return t * t * t * t * t;
        },
        quinticOut: function(t) {
            return --t * t * t * t * t + 1;
        },
        quinticInOut: function(t) {
            return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2);
        },
        sinusoidalIn: function(t) {
            return 1 - Math.cos(t * Math.PI / 2);
        },
        sinusoidalOut: function(t) {
            return Math.sin(t * Math.PI / 2);
        },
        sinusoidalInOut: function(t) {
            return .5 * (1 - Math.cos(Math.PI * t));
        },
        exponentialIn: function(t) {
            return 0 === t ? 0 : Math.pow(1024, t - 1);
        },
        exponentialOut: function(t) {
            return 1 === t ? 1 : 1 - Math.pow(2, -10 * t);
        },
        exponentialInOut: function(t) {
            return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (2 - Math.pow(2, -10 * (t - 1)));
        },
        circularIn: function(t) {
            return 1 - Math.sqrt(1 - t * t);
        },
        circularOut: function(t) {
            return Math.sqrt(1 - --t * t);
        },
        circularInOut: function(t) {
            return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
        },
        elasticIn: function(t) {
            var e, n = .1;
            return 0 === t ? 0 : 1 === t ? 1 : (e = !n || n < 1 ? (n = 1, .1) : .4 * Math.asin(1 / n) / (2 * Math.PI), 
            -(n * Math.pow(2, 10 * --t) * Math.sin(2 * (t - e) * Math.PI / .4)));
        },
        elasticOut: function(t) {
            var e, n = .1;
            return 0 === t ? 0 : 1 === t ? 1 : (e = !n || n < 1 ? (n = 1, .1) : .4 * Math.asin(1 / n) / (2 * Math.PI), 
            n * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / .4) + 1);
        },
        elasticInOut: function(t) {
            var e, n = .1;
            return 0 === t ? 0 : 1 === t ? 1 : (e = !n || n < 1 ? (n = 1, .1) : .4 * Math.asin(1 / n) / (2 * Math.PI), 
            (t *= 2) < 1 ? -.5 * n * Math.pow(2, 10 * --t) * Math.sin(2 * (t - e) * Math.PI / .4) : n * Math.pow(2, -10 * --t) * Math.sin(2 * (t - e) * Math.PI / .4) * .5 + 1);
        },
        backIn: function(t) {
            return t * t * (2.70158 * t - 1.70158);
        },
        backOut: function(t) {
            return --t * t * (2.70158 * t + 1.70158) + 1;
        },
        backInOut: function(t) {
            var e = 2.5949095;
            return (t *= 2) < 1 ? .5 * t * t * ((1 + e) * t - e) : .5 * ((t -= 2) * t * ((1 + e) * t + e) + 2);
        },
        bounceIn: function(t) {
            return 1 - Os.bounceOut(1 - t);
        },
        bounceOut: function(t) {
            return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
        },
        bounceInOut: function(t) {
            return t < .5 ? .5 * Os.bounceIn(2 * t) : .5 * Os.bounceOut(2 * t - 1) + .5;
        }
    };
    function Ls() {
        this.head = null, this.tail = null, this._len = 0;
    }
    st.prototype = {
        constructor: st,
        step: function(t, e) {
            if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), 
            this._paused) this._pausedTime += e; else {
                var n = (t - this._startTime - this._pausedTime) / this._life;
                if (!(n < 0)) return n = Math.min(n, 1), e = "function" == typeof (e = "string" == typeof (e = this.easing) ? Os[e] : e) ? e(n) : n, 
                this.fire("frame", e), 1 === n ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0, 
                "destroy") : null;
            }
        },
        restart: function(t) {
            var e = (t - this._startTime - this._pausedTime) % this._life;
            this._startTime = t - e + this.gap, this._pausedTime = 0, this._needsRemove = !1;
        },
        fire: function(t, e) {
            this[t = "on" + t] && this[t](this._target, e);
        },
        pause: function() {
            this._paused = !0;
        },
        resume: function() {
            this._paused = !1;
        }
    }, (Jl = Ls.prototype).insert = function(t) {
        return t = new Es(t), this.insertEntry(t), t;
    }, Jl.insertEntry = function(t) {
        this.head ? ((this.tail.next = t).prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t, 
        this._len++;
    }, Jl.remove = function(t) {
        var e = t.prev, n = t.next;
        e ? e.next = n : this.head = n, n ? n.prev = e : this.tail = e, t.next = t.prev = null, 
        this._len--;
    }, Jl.len = function() {
        return this._len;
    }, Jl.clear = function() {
        this.head = this.tail = null, this._len = 0;
    };
    var Es = function(t) {
        this.value = t, this.next, this.prev;
    };
    function Bs(t, e, n, i) {
        this._tracks = {}, this._target = t, this._loop = e || !1, this._getter = n || vt, 
        this._setter = i || _t, this._clipCount = 0, this._delay = 0, this._doneList = [], 
        this._onframeList = [], this._clipList = [];
    }
    (ru = (yu = function(t) {
        this._list = new Ls(), this._map = {}, this._maxSize = t || 10, this._lastRemovedEntry = null;
    }).prototype).put = function(t, e) {
        var n, i, o = this._list, r = this._map, a = null;
        return null == r[t] && (i = o.len(), n = this._lastRemovedEntry, i >= this._maxSize && 0 < i && (i = o.head, 
        o.remove(i), delete r[i.key], a = i.value, this._lastRemovedEntry = i), n ? n.value = e : n = new Es(e), 
        n.key = t, o.insertEntry(n), r[t] = n), a;
    }, ru.get = function(t) {
        var e = this._map[t], t = this._list;
        return null != e ? (e !== t.tail && (t.remove(e), t.insertEntry(e)), e.value) : void 0;
    }, ru.clear = function() {
        this._list.clear(), this._map = {};
    };
    var zs = {
        transparent: [ 0, 0, 0, 0 ],
        aliceblue: [ 240, 248, 255, 1 ],
        antiquewhite: [ 250, 235, 215, 1 ],
        aqua: [ 0, 255, 255, 1 ],
        aquamarine: [ 127, 255, 212, 1 ],
        azure: [ 240, 255, 255, 1 ],
        beige: [ 245, 245, 220, 1 ],
        bisque: [ 255, 228, 196, 1 ],
        black: [ 0, 0, 0, 1 ],
        blanchedalmond: [ 255, 235, 205, 1 ],
        blue: [ 0, 0, 255, 1 ],
        blueviolet: [ 138, 43, 226, 1 ],
        brown: [ 165, 42, 42, 1 ],
        burlywood: [ 222, 184, 135, 1 ],
        cadetblue: [ 95, 158, 160, 1 ],
        chartreuse: [ 127, 255, 0, 1 ],
        chocolate: [ 210, 105, 30, 1 ],
        coral: [ 255, 127, 80, 1 ],
        cornflowerblue: [ 100, 149, 237, 1 ],
        cornsilk: [ 255, 248, 220, 1 ],
        crimson: [ 220, 20, 60, 1 ],
        cyan: [ 0, 255, 255, 1 ],
        darkblue: [ 0, 0, 139, 1 ],
        darkcyan: [ 0, 139, 139, 1 ],
        darkgoldenrod: [ 184, 134, 11, 1 ],
        darkgray: [ 169, 169, 169, 1 ],
        darkgreen: [ 0, 100, 0, 1 ],
        darkgrey: [ 169, 169, 169, 1 ],
        darkkhaki: [ 189, 183, 107, 1 ],
        darkmagenta: [ 139, 0, 139, 1 ],
        darkolivegreen: [ 85, 107, 47, 1 ],
        darkorange: [ 255, 140, 0, 1 ],
        darkorchid: [ 153, 50, 204, 1 ],
        darkred: [ 139, 0, 0, 1 ],
        darksalmon: [ 233, 150, 122, 1 ],
        darkseagreen: [ 143, 188, 143, 1 ],
        darkslateblue: [ 72, 61, 139, 1 ],
        darkslategray: [ 47, 79, 79, 1 ],
        darkslategrey: [ 47, 79, 79, 1 ],
        darkturquoise: [ 0, 206, 209, 1 ],
        darkviolet: [ 148, 0, 211, 1 ],
        deeppink: [ 255, 20, 147, 1 ],
        deepskyblue: [ 0, 191, 255, 1 ],
        dimgray: [ 105, 105, 105, 1 ],
        dimgrey: [ 105, 105, 105, 1 ],
        dodgerblue: [ 30, 144, 255, 1 ],
        firebrick: [ 178, 34, 34, 1 ],
        floralwhite: [ 255, 250, 240, 1 ],
        forestgreen: [ 34, 139, 34, 1 ],
        fuchsia: [ 255, 0, 255, 1 ],
        gainsboro: [ 220, 220, 220, 1 ],
        ghostwhite: [ 248, 248, 255, 1 ],
        gold: [ 255, 215, 0, 1 ],
        goldenrod: [ 218, 165, 32, 1 ],
        gray: [ 128, 128, 128, 1 ],
        green: [ 0, 128, 0, 1 ],
        greenyellow: [ 173, 255, 47, 1 ],
        grey: [ 128, 128, 128, 1 ],
        honeydew: [ 240, 255, 240, 1 ],
        hotpink: [ 255, 105, 180, 1 ],
        indianred: [ 205, 92, 92, 1 ],
        indigo: [ 75, 0, 130, 1 ],
        ivory: [ 255, 255, 240, 1 ],
        khaki: [ 240, 230, 140, 1 ],
        lavender: [ 230, 230, 250, 1 ],
        lavenderblush: [ 255, 240, 245, 1 ],
        lawngreen: [ 124, 252, 0, 1 ],
        lemonchiffon: [ 255, 250, 205, 1 ],
        lightblue: [ 173, 216, 230, 1 ],
        lightcoral: [ 240, 128, 128, 1 ],
        lightcyan: [ 224, 255, 255, 1 ],
        lightgoldenrodyellow: [ 250, 250, 210, 1 ],
        lightgray: [ 211, 211, 211, 1 ],
        lightgreen: [ 144, 238, 144, 1 ],
        lightgrey: [ 211, 211, 211, 1 ],
        lightpink: [ 255, 182, 193, 1 ],
        lightsalmon: [ 255, 160, 122, 1 ],
        lightseagreen: [ 32, 178, 170, 1 ],
        lightskyblue: [ 135, 206, 250, 1 ],
        lightslategray: [ 119, 136, 153, 1 ],
        lightslategrey: [ 119, 136, 153, 1 ],
        lightsteelblue: [ 176, 196, 222, 1 ],
        lightyellow: [ 255, 255, 224, 1 ],
        lime: [ 0, 255, 0, 1 ],
        limegreen: [ 50, 205, 50, 1 ],
        linen: [ 250, 240, 230, 1 ],
        magenta: [ 255, 0, 255, 1 ],
        maroon: [ 128, 0, 0, 1 ],
        mediumaquamarine: [ 102, 205, 170, 1 ],
        mediumblue: [ 0, 0, 205, 1 ],
        mediumorchid: [ 186, 85, 211, 1 ],
        mediumpurple: [ 147, 112, 219, 1 ],
        mediumseagreen: [ 60, 179, 113, 1 ],
        mediumslateblue: [ 123, 104, 238, 1 ],
        mediumspringgreen: [ 0, 250, 154, 1 ],
        mediumturquoise: [ 72, 209, 204, 1 ],
        mediumvioletred: [ 199, 21, 133, 1 ],
        midnightblue: [ 25, 25, 112, 1 ],
        mintcream: [ 245, 255, 250, 1 ],
        mistyrose: [ 255, 228, 225, 1 ],
        moccasin: [ 255, 228, 181, 1 ],
        navajowhite: [ 255, 222, 173, 1 ],
        navy: [ 0, 0, 128, 1 ],
        oldlace: [ 253, 245, 230, 1 ],
        olive: [ 128, 128, 0, 1 ],
        olivedrab: [ 107, 142, 35, 1 ],
        orange: [ 255, 165, 0, 1 ],
        orangered: [ 255, 69, 0, 1 ],
        orchid: [ 218, 112, 214, 1 ],
        palegoldenrod: [ 238, 232, 170, 1 ],
        palegreen: [ 152, 251, 152, 1 ],
        paleturquoise: [ 175, 238, 238, 1 ],
        palevioletred: [ 219, 112, 147, 1 ],
        papayawhip: [ 255, 239, 213, 1 ],
        peachpuff: [ 255, 218, 185, 1 ],
        peru: [ 205, 133, 63, 1 ],
        pink: [ 255, 192, 203, 1 ],
        plum: [ 221, 160, 221, 1 ],
        powderblue: [ 176, 224, 230, 1 ],
        purple: [ 128, 0, 128, 1 ],
        red: [ 255, 0, 0, 1 ],
        rosybrown: [ 188, 143, 143, 1 ],
        royalblue: [ 65, 105, 225, 1 ],
        saddlebrown: [ 139, 69, 19, 1 ],
        salmon: [ 250, 128, 114, 1 ],
        sandybrown: [ 244, 164, 96, 1 ],
        seagreen: [ 46, 139, 87, 1 ],
        seashell: [ 255, 245, 238, 1 ],
        sienna: [ 160, 82, 45, 1 ],
        silver: [ 192, 192, 192, 1 ],
        skyblue: [ 135, 206, 235, 1 ],
        slateblue: [ 106, 90, 205, 1 ],
        slategray: [ 112, 128, 144, 1 ],
        slategrey: [ 112, 128, 144, 1 ],
        snow: [ 255, 250, 250, 1 ],
        springgreen: [ 0, 255, 127, 1 ],
        steelblue: [ 70, 130, 180, 1 ],
        tan: [ 210, 180, 140, 1 ],
        teal: [ 0, 128, 128, 1 ],
        thistle: [ 216, 191, 216, 1 ],
        tomato: [ 255, 99, 71, 1 ],
        turquoise: [ 64, 224, 208, 1 ],
        violet: [ 238, 130, 238, 1 ],
        wheat: [ 245, 222, 179, 1 ],
        white: [ 255, 255, 255, 1 ],
        whitesmoke: [ 245, 245, 245, 1 ],
        yellow: [ 255, 255, 0, 1 ],
        yellowgreen: [ 154, 205, 50, 1 ]
    }, Rs = new yu(20), Ns = null, Fs = Array.prototype.slice;
    Bs.prototype = {
        when: function(t, e) {
            var n, i = this._tracks;
            for (n in e) if (e.hasOwnProperty(n)) {
                if (!i[n]) {
                    i[n] = [];
                    var o = this._getter(this._target, n);
                    if (null == o) continue;
                    0 !== t && i[n].push({
                        time: 0,
                        value: function(t) {
                            if (O(t)) {
                                var e = t.length;
                                if (O(t[0])) {
                                    for (var n = [], i = 0; i < e; i++) n.push(Fs.call(t[i]));
                                    return n;
                                }
                                return Fs.call(t);
                            }
                            return t;
                        }(o)
                    });
                }
                i[n].push({
                    time: t,
                    value: e[n]
                });
            }
            return this;
        },
        during: function(t) {
            return this._onframeList.push(t), this;
        },
        pause: function() {
            for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause();
            this._paused = !0;
        },
        resume: function() {
            for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume();
            this._paused = !1;
        },
        isPaused: function() {
            return !!this._paused;
        },
        _doneCallback: function() {
            this._tracks = {}, this._clipList.length = 0;
            for (var t = this._doneList, e = t.length, n = 0; n < e; n++) t[n].call(this);
        },
        start: function(t, e) {
            function n() {
                --l || s._doneCallback();
            }
            var i, o, r, a, s = this, l = 0;
            for (o in this._tracks) !this._tracks.hasOwnProperty(o) || (r = It(this, t, n, this._tracks[o], o, e)) && (this._clipList.push(r), 
            l++, this.animation && this.animation.addClip(r), i = r);
            return i && (a = i.onframe, i.onframe = function(t, e) {
                a(t, e);
                for (var n = 0; n < s._onframeList.length; n++) s._onframeList[n](t, e);
            }), l || this._doneCallback(), this;
        },
        stop: function(t) {
            for (var e = this._clipList, n = this.animation, i = 0; i < e.length; i++) {
                var o = e[i];
                t && o.onframe(this._target, 1), n && n.removeClip(o);
            }
            e.length = 0;
        },
        delay: function(t) {
            return this._delay = t, this;
        },
        done: function(t) {
            return t && this._doneList.push(t), this;
        },
        getClips: function() {
            return this._clipList;
        }
    };
    var Hs = 1;
    function Vs() {
        this.animators = [];
    }
    "undefined" != typeof window && (Hs = Math.max(window.devicePixelRatio || 1, 1));
    var Ws = Hs, Gs = gu = function() {};
    Vs.prototype = {
        constructor: Vs,
        animate: function(t, e) {
            var n, i = !1, o = this, r = this.__zr;
            if (t) {
                for (var a = t.split("."), s = o, i = "shape" === a[0], l = 0, h = a.length; l < h; l++) s = s && s[a[l]];
                s && (n = s);
            } else n = o;
            if (n) {
                var u = o.animators, c = new Bs(n, e);
                return c.during(function() {
                    o.dirty(i);
                }).done(function() {
                    u.splice(m(u, c), 1);
                }), u.push(c), r && r.animation.addAnimator(c), c;
            }
            Gs('Property "' + t + '" is not existed in element ' + o.id);
        },
        stopAnimation: function(t) {
            for (var e = this.animators, n = e.length, i = 0; i < n; i++) e[i].stop(t);
            return e.length = 0, this;
        },
        animateTo: function(t, e, n, i, o, r) {
            Ct(this, t, e, n, i, o, r);
        },
        animateFrom: function(t, e, n, i, o, r) {
            Ct(this, t, e, n, i, o, r, !0);
        }
    };
    var Xs = function(t) {
        Ds.call(this, t), gs.call(this, t), Vs.call(this, t), this.id = t.id || Ja();
    };
    Xs.prototype = {
        type: "element",
        name: "",
        __zr: null,
        ignore: !1,
        clipPath: null,
        isGroup: !1,
        drift: function(t, e) {
            switch (this.draggable) {
              case "horizontal":
                e = 0;
                break;

              case "vertical":
                t = 0;
            }
            var n = this.transform;
            (n = n || (this.transform = [ 1, 0, 0, 1, 0, 0 ]))[4] += t, n[5] += e, this.decomposeTransform(), 
            this.dirty(!1);
        },
        beforeUpdate: function() {},
        afterUpdate: function() {},
        update: function() {
            this.updateTransform();
        },
        traverse: function() {},
        attrKV: function(t, e) {
            var n;
            "position" === t || "scale" === t || "origin" === t ? e && ((n = (n = this[t]) || (this[t] = []))[0] = e[0], 
            n[1] = e[1]) : this[t] = e;
        },
        hide: function() {
            this.ignore = !0, this.__zr && this.__zr.refresh();
        },
        show: function() {
            this.ignore = !1, this.__zr && this.__zr.refresh();
        },
        attr: function(t, e) {
            if ("string" == typeof t) this.attrKV(t, e); else if (D(t)) for (var n in t) t.hasOwnProperty(n) && this.attrKV(n, t[n]);
            return this.dirty(!1), this;
        },
        setClipPath: function(t) {
            var e = this.__zr;
            e && t.addSelfToZr(e), this.clipPath && this.clipPath !== t && this.removeClipPath(), 
            (this.clipPath = t).__zr = e, (t.__clipTarget = this).dirty(!1);
        },
        removeClipPath: function() {
            var t = this.clipPath;
            t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, 
            this.clipPath = null, this.dirty(!1));
        },
        addSelfToZr: function(t) {
            this.__zr = t;
            var e = this.animators;
            if (e) for (var n = 0; n < e.length; n++) t.animation.addAnimator(e[n]);
            this.clipPath && this.clipPath.addSelfToZr(t);
        },
        removeSelfFromZr: function(t) {
            this.__zr = null;
            var e = this.animators;
            if (e) for (var n = 0; n < e.length; n++) t.animation.removeAnimator(e[n]);
            this.clipPath && this.clipPath.removeSelfFromZr(t);
        }
    }, e(Xs, Vs), e(Xs, Ds), e(Xs, gs);
    var Us, Ys, qs, js, Zs = H, Ks = Math.min, $s = Math.max;
    kt.prototype = {
        constructor: kt,
        union: function(t) {
            var e = Ks(t.x, this.x), n = Ks(t.y, this.y);
            this.width = $s(t.x + t.width, this.x + this.width) - e, this.height = $s(t.y + t.height, this.y + this.height) - n, 
            this.x = e, this.y = n;
        },
        applyTransform: (Us = [], Ys = [], qs = [], js = [], function(t) {
            var e;
            t && (Us[0] = qs[0] = this.x, Us[1] = js[1] = this.y, Ys[0] = js[0] = this.x + this.width, 
            Ys[1] = qs[1] = this.y + this.height, Zs(Us, Us, t), Zs(Ys, Ys, t), Zs(qs, qs, t), 
            Zs(js, js, t), this.x = Ks(Us[0], Ys[0], qs[0], js[0]), this.y = Ks(Us[1], Ys[1], qs[1], js[1]), 
            e = $s(Us[0], Ys[0], qs[0], js[0]), t = $s(Us[1], Ys[1], qs[1], js[1]), this.width = e - this.x, 
            this.height = t - this.y);
        }),
        calculateTransform: function(t) {
            var e = t.width / this.width, n = t.height / this.height, i = J();
            return nt(i, i, [ -this.x, -this.y ]), ot(i, i, [ e, n ]), nt(i, i, [ t.x, t.y ]), 
            i;
        },
        intersect: function(t) {
            if (!t) return !1;
            t instanceof kt || (t = kt.create(t));
            var e = this.x, n = this.x + this.width, i = this.y, o = this.y + this.height, r = t.x, a = t.x + t.width, s = t.y, t = t.y + t.height;
            return !(n < r || a < e || o < s || t < i);
        },
        contain: function(t, e) {
            return t >= this.x && t <= this.x + this.width && e >= this.y && e <= this.y + this.height;
        },
        clone: function() {
            return new kt(this.x, this.y, this.width, this.height);
        },
        copy: function(t) {
            this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height;
        },
        plain: function() {
            return {
                x: this.x,
                y: this.y,
                width: this.width,
                height: this.height
            };
        }
    }, kt.create = function(t) {
        return new kt(t.x, t.y, t.width, t.height);
    };
    var Qs = function(t) {
        for (var e in t = t || {}, Xs.call(this, t), t) t.hasOwnProperty(e) && (this[e] = t[e]);
        this._children = [], this.__storage = null, this.__dirty = !0;
    };
    function Js() {
        this._roots = [], this._displayList = [], this._displayListLen = 0;
    }
    Qs.prototype = {
        constructor: Qs,
        isGroup: !0,
        type: "group",
        silent: !1,
        children: function() {
            return this._children.slice();
        },
        childAt: function(t) {
            return this._children[t];
        },
        childOfName: function(t) {
            for (var e = this._children, n = 0; n < e.length; n++) if (e[n].name === t) return e[n];
        },
        childCount: function() {
            return this._children.length;
        },
        add: function(t) {
            return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)), 
            this;
        },
        addBefore: function(t, e) {
            var n;
            return t && t !== this && t.parent !== this && e && e.parent === this && 0 <= (e = (n = this._children).indexOf(e)) && (n.splice(e, 0, t), 
            this._doAdd(t)), this;
        },
        _doAdd: function(t) {
            t.parent && t.parent.remove(t);
            var e = (t.parent = this).__storage, n = this.__zr;
            e && e !== t.__storage && (e.addToStorage(t), t instanceof Qs && t.addChildrenToStorage(e)), 
            n && n.refresh();
        },
        remove: function(t) {
            var e = this.__zr, n = this.__storage, i = this._children, o = m(i, t);
            return o < 0 || (i.splice(o, 1), t.parent = null, n && (n.delFromStorage(t), t instanceof Qs && t.delChildrenFromStorage(n)), 
            e && e.refresh()), this;
        },
        removeAll: function() {
            for (var t, e = this._children, n = this.__storage, i = 0; i < e.length; i++) t = e[i], 
            n && (n.delFromStorage(t), t instanceof Qs && t.delChildrenFromStorage(n)), t.parent = null;
            return e.length = 0, this;
        },
        eachChild: function(t, e) {
            for (var n = this._children, i = 0; i < n.length; i++) {
                var o = n[i];
                t.call(e, o, i);
            }
            return this;
        },
        traverse: function(t, e) {
            for (var n = 0; n < this._children.length; n++) {
                var i = this._children[n];
                t.call(e, i), "group" === i.type && i.traverse(t, e);
            }
            return this;
        },
        addChildrenToStorage: function(t) {
            for (var e = 0; e < this._children.length; e++) {
                var n = this._children[e];
                t.addToStorage(n), n instanceof Qs && n.addChildrenToStorage(t);
            }
        },
        delChildrenFromStorage: function(t) {
            for (var e = 0; e < this._children.length; e++) {
                var n = this._children[e];
                t.delFromStorage(n), n instanceof Qs && n.delChildrenFromStorage(t);
            }
        },
        dirty: function() {
            return this.__dirty = !0, this.__zr && this.__zr.refresh(), this;
        },
        getBoundingRect: function(t) {
            for (var e = null, n = new kt(0, 0, 0, 0), i = t || this._children, o = [], r = 0; r < i.length; r++) {
                var a, s = i[r];
                s.ignore || s.invisible || (a = s.getBoundingRect(), (s = s.getLocalTransform(o)) ? (n.copy(a), 
                n.applyTransform(s), (e = e || n.clone()).union(n)) : (e = e || a.clone()).union(a));
            }
            return e || n;
        }
    }, r(Qs, Xs);
    var tl = 32, el = 7;
    Js.prototype = {
        constructor: Js,
        traverse: function(t, e) {
            for (var n = 0; n < this._roots.length; n++) this._roots[n].traverse(t, e);
        },
        getDisplayList: function(t, e) {
            return e = e || !1, t && this.updateDisplayList(e), this._displayList;
        },
        updateDisplayList: function(t) {
            this._displayListLen = 0;
            for (var e = this._roots, n = this._displayList, i = 0, o = e.length; i < o; i++) this._updateAndAddDisplayable(e[i], null, t);
            n.length = this._displayListLen, ts.canvasSupported && Bt(n, zt);
        },
        _updateAndAddDisplayable: function(t, e, n) {
            if (!t.ignore || n) {
                t.beforeUpdate(), t.__dirty && t.update(), t.afterUpdate();
                var i = t.clipPath;
                if (i) {
                    e = e ? e.slice() : [];
                    for (var o = i, r = t; o; ) o.parent = r, o.updateTransform(), e.push(o), o = (r = o).clipPath;
                }
                if (t.isGroup) {
                    for (var a = t._children, s = 0; s < a.length; s++) {
                        var l = a[s];
                        t.__dirty && (l.__dirty = !0), this._updateAndAddDisplayable(l, e, n);
                    }
                    t.__dirty = !1;
                } else t.__clipPaths = e, this._displayList[this._displayListLen++] = t;
            }
        },
        addRoot: function(t) {
            t.__storage !== this && (t instanceof Qs && t.addChildrenToStorage(this), this.addToStorage(t), 
            this._roots.push(t));
        },
        delRoot: function(t) {
            if (null == t) {
                for (var e = 0; e < this._roots.length; e++) {
                    var n = this._roots[e];
                    n instanceof Qs && n.delChildrenFromStorage(this);
                }
                return this._roots = [], this._displayList = [], void (this._displayListLen = 0);
            }
            if (t instanceof Array) for (var e = 0, i = t.length; e < i; e++) this.delRoot(t[e]); else {
                var o = m(this._roots, t);
                0 <= o && (this.delFromStorage(t), this._roots.splice(o, 1), t instanceof Qs && t.delChildrenFromStorage(this));
            }
        },
        addToStorage: function(t) {
            return t && (t.__storage = this, t.dirty(!1)), this;
        },
        delFromStorage: function(t) {
            return t && (t.__storage = null), this;
        },
        dispose: function() {
            this._renderList = this._roots = null;
        },
        displayableSortFunc: zt
    };
    var nl = {
        shadowBlur: 1,
        shadowOffsetX: 1,
        shadowOffsetY: 1,
        textShadowBlur: 1,
        textShadowOffsetX: 1,
        textShadowOffsetY: 1,
        textBoxShadowBlur: 1,
        textBoxShadowOffsetX: 1,
        textBoxShadowOffsetY: 1
    }, il = function(t, e, n) {
        return nl.hasOwnProperty(e) ? n *= t.dpr : n;
    }, ol = 0, rl = 1, al = 2, sl = [ [ "shadowBlur", 0 ], [ "shadowOffsetX", 0 ], [ "shadowOffsetY", 0 ], [ "shadowColor", "#000" ], [ "lineCap", "butt" ], [ "lineJoin", "miter" ], [ "miterLimit", 10 ] ], ll = function(t) {
        this.extendFrom(t, !1);
    };
    ll.prototype = {
        constructor: ll,
        fill: "#000",
        stroke: null,
        opacity: 1,
        fillOpacity: null,
        strokeOpacity: null,
        lineDash: null,
        lineDashOffset: 0,
        shadowBlur: 0,
        shadowOffsetX: 0,
        shadowOffsetY: 0,
        lineWidth: 1,
        strokeNoScale: !1,
        text: null,
        font: null,
        textFont: null,
        fontStyle: null,
        fontWeight: null,
        fontSize: null,
        fontFamily: null,
        textTag: null,
        textFill: "#000",
        textStroke: null,
        textWidth: null,
        textHeight: null,
        textStrokeWidth: 0,
        textLineHeight: null,
        textPosition: "inside",
        textRect: null,
        textOffset: null,
        textAlign: null,
        textVerticalAlign: null,
        textDistance: 5,
        textShadowColor: "transparent",
        textShadowBlur: 0,
        textShadowOffsetX: 0,
        textShadowOffsetY: 0,
        textBoxShadowColor: "transparent",
        textBoxShadowBlur: 0,
        textBoxShadowOffsetX: 0,
        textBoxShadowOffsetY: 0,
        transformText: !1,
        textRotation: 0,
        textOrigin: null,
        textBackgroundColor: null,
        textBorderColor: null,
        textBorderWidth: 0,
        textBorderRadius: 0,
        textPadding: null,
        rich: null,
        truncate: null,
        blend: null,
        bind: function(t, e, n) {
            var i = this, o = n && n.style, r = !o || t.__attrCachedBy !== rl;
            t.__attrCachedBy = rl;
            for (var a = 0; a < sl.length; a++) {
                var s = sl[a], l = s[0];
                !r && i[l] === o[l] || (t[l] = il(t, l, i[l] || s[1]));
            }
            !r && i.fill === o.fill || (t.fillStyle = i.fill), !r && i.stroke === o.stroke || (t.strokeStyle = i.stroke), 
            !r && i.opacity === o.opacity || (t.globalAlpha = null == i.opacity ? 1 : i.opacity), 
            !r && i.blend === o.blend || (t.globalCompositeOperation = i.blend || "source-over"), 
            this.hasStroke() && (n = i.lineWidth, t.lineWidth = n / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1));
        },
        hasFill: function() {
            var t = this.fill;
            return null != t && "none" !== t;
        },
        hasStroke: function() {
            var t = this.stroke;
            return null != t && "none" !== t && 0 < this.lineWidth;
        },
        extendFrom: function(t, e) {
            if (t) for (var n in t) !t.hasOwnProperty(n) || !0 !== e && (!1 === e ? this.hasOwnProperty(n) : null == t[n]) || (this[n] = t[n]);
        },
        set: function(t, e) {
            "string" == typeof t ? this[t] = e : this.extendFrom(t, !0);
        },
        clone: function() {
            var t = new this.constructor();
            return t.extendFrom(this, !0), t;
        },
        getGradient: function(t, e, n) {
            for (var i = ("radial" === e.type ? function(t, e, n) {
                var i = n.width, o = n.height, r = Math.min(i, o), a = null == e.x ? .5 : e.x, s = null == e.y ? .5 : e.y, l = null == e.r ? .5 : e.r;
                return e.global || (a = a * i + n.x, s = s * o + n.y, l *= r), t.createRadialGradient(a, s, 0, a, s, l);
            } : function(t, e, n) {
                var i = null == e.x ? 0 : e.x, o = null == e.x2 ? 1 : e.x2, r = null == e.y ? 0 : e.y, a = null == e.y2 ? 0 : e.y2;
                return e.global || (i = i * n.width + n.x, o = o * n.width + n.x, r = r * n.height + n.y, 
                a = a * n.height + n.y), i = isNaN(i) ? 0 : i, o = isNaN(o) ? 1 : o, r = isNaN(r) ? 0 : r, 
                a = isNaN(a) ? 0 : a, t.createLinearGradient(i, r, o, a);
            })(t, e, n), o = e.colorStops, r = 0; r < o.length; r++) i.addColorStop(o[r].offset, o[r].color);
            return i;
        }
    };
    for (var hl = ll.prototype, ul = 0; ul < sl.length; ul++) {
        var cl = sl[ul];
        cl[0] in hl || (hl[cl[0]] = cl[1]);
    }
    function dl(t, e) {
        this.image = t, this.repeat = e, this.type = "pattern";
    }
    function fl(t, e, n) {
        var i;
        n = n || Ws, "string" == typeof t ? i = Nt(t, e, n) : D(t) && (t = (i = t).id), 
        this.id = t, (t = (this.dom = i).style) && (i.onselectstart = Rt, t["-webkit-user-select"] = "none", 
        t["user-select"] = "none", t["-webkit-touch-callout"] = "none", t["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", 
        t.padding = 0, t.margin = 0, t["border-width"] = 0), this.domBack = null, this.ctxBack = null, 
        this.painter = e, this.config = null, this.clearColor = 0, this.motionBlur = !1, 
        this.lastFrameAlpha = .7, this.dpr = n;
    }
    ll.getGradient = hl.getGradient, fl.prototype = {
        constructor: fl,
        __dirty: !0,
        __used: !(dl.prototype.getCanvasPattern = function(t) {
            return t.createPattern(this.image, this.repeat || "repeat");
        }),
        __drawIndex: 0,
        __startIndex: 0,
        __endIndex: 0,
        incremental: !1,
        getElementCount: function() {
            return this.__endIndex - this.__startIndex;
        },
        initContext: function() {
            this.ctx = this.dom.getContext("2d"), this.ctx.dpr = this.dpr;
        },
        createBackBuffer: function() {
            var t = this.dpr;
            this.domBack = Nt("back-" + this.id, this.painter, t), this.ctxBack = this.domBack.getContext("2d"), 
            1 !== t && this.ctxBack.scale(t, t);
        },
        resize: function(t, e) {
            var n = this.dpr, i = this.dom, o = i.style, r = this.domBack;
            o && (o.width = t + "px", o.height = e + "px"), i.width = t * n, i.height = e * n, 
            r && (r.width = t * n, r.height = e * n, 1 !== n && this.ctxBack.scale(n, n));
        },
        clear: function(t, e) {
            var n, i = this.dom, o = this.ctx, r = i.width, a = i.height, e = e || this.clearColor, s = this.motionBlur && !t, l = this.lastFrameAlpha, t = this.dpr;
            s && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", 
            this.ctxBack.drawImage(i, 0, 0, r / t, a / t)), o.clearRect(0, 0, r, a), e && "transparent" !== e && (e.colorStops ? (n = e.__canvasGradient || ll.getGradient(o, e, {
                x: 0,
                y: 0,
                width: r,
                height: a
            }), e.__canvasGradient = n) : e.image && (n = dl.prototype.getCanvasPattern.call(e, o)), 
            o.save(), o.fillStyle = n || e, o.fillRect(0, 0, r, a), o.restore()), s && (s = this.domBack, 
            o.save(), o.globalAlpha = l, o.drawImage(s, 0, 0, r, a), o.restore());
        }
    };
    var pl = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function(t) {
        setTimeout(t, 16);
    }, gl = new yu(50), ml = {}, yl = 0, vl = 5e3, _l = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g, xl = "12px sans-serif", wl = {
        measureText: function(t, e) {
            var n = Ka = Ka || Za().getContext("2d");
            return n.font = e || xl, n.measureText(t);
        }
    }, bl = xl, Sl = {
        left: 1,
        right: 1,
        center: 1
    }, Ml = {
        top: 1,
        bottom: 1,
        middle: 1
    }, Tl = [ [ "textShadowBlur", "shadowBlur", 0 ], [ "textShadowOffsetX", "shadowOffsetX", 0 ], [ "textShadowOffsetY", "shadowOffsetY", 0 ], [ "textShadowColor", "shadowColor", "transparent" ] ], Il = {}, Cl = {}, Dl = new kt();
    me.prototype = {
        constructor: me,
        type: "displayable",
        __dirty: !0,
        invisible: !((Bu = function() {}).prototype = {
            constructor: Bu,
            drawRectText: function(t, e) {
                var n = this.style;
                e = n.textRect || e, this.__dirty && ee(n);
                var i, o = n.text;
                null != o && (o += ""), ge(o, n) && (t.save(), i = this.transform, n.transformText ? this.setTransform(t) : i && (Dl.copy(e), 
                Dl.applyTransform(i), e = Dl), ie(this, t, o, n, e, 9), t.restore());
            }
        }),
        z: 0,
        z2: 0,
        zlevel: 0,
        draggable: !1,
        dragging: !1,
        silent: !1,
        culling: !1,
        cursor: "pointer",
        rectHover: !1,
        progressive: !1,
        incremental: !1,
        globalScaleRatio: 1,
        beforeBrush: function() {},
        afterBrush: function() {},
        brush: function() {},
        getBoundingRect: function() {},
        contain: function(t, e) {
            return this.rectContain(t, e);
        },
        traverse: function(t, e) {
            t.call(e, this);
        },
        rectContain: function(t, e) {
            return e = this.transformCoordToLocal(t, e), this.getBoundingRect().contain(e[0], e[1]);
        },
        dirty: function() {
            this.__dirty = this.__dirtyText = !0, this._rect = null, this.__zr && this.__zr.refresh();
        },
        animateStyle: function(t) {
            return this.animate("style", t);
        },
        attrKV: function(t, e) {
            "style" !== t ? Xs.prototype.attrKV.call(this, t, e) : this.style.set(e);
        },
        setStyle: function(t, e) {
            return this.style.set(t, e), this.dirty(!1), this;
        },
        useStyle: function(t) {
            return this.style = new ll(t, this), this.dirty(!1), this;
        },
        calculateTextPosition: null
    }, r(me, Xs), e(me, Bu), ye.prototype = {
        constructor: ye,
        type: "image",
        brush: function(t, e) {
            var n = this.style, i = n.image;
            n.bind(t, this, e);
            var o, r, a, s, l, h, u = this._image = Ft(i, this._image, this, this.onload);
            u && Vt(u) && (o = n.x || 0, r = n.y || 0, a = n.width, s = n.height, e = u.width / u.height, 
            null == a && null != s ? a = s * e : null == s && null != a ? s = a / e : null == a && null == s && (a = u.width, 
            s = u.height), this.setTransform(t), n.sWidth && n.sHeight ? (l = n.sx || 0, h = n.sy || 0, 
            t.drawImage(u, l, h, n.sWidth, n.sHeight, o, r, a, s)) : n.sx && n.sy ? (i = a - (l = n.sx), 
            e = s - (h = n.sy), t.drawImage(u, l, h, i, e, o, r, a, s)) : t.drawImage(u, o, r, a, s), 
            null != n.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect())));
        },
        getBoundingRect: function() {
            var t = this.style;
            return this._rect || (this._rect = new kt(t.x || 0, t.y || 0, t.width || 0, t.height || 0)), 
            this._rect;
        }
    }, r(ye, me);
    var kl = 314159, Al = new kt(0, 0, 0, 0), Pl = new kt(0, 0, 0, 0);
    function Ol(t) {
        t = t || {}, this.stage = t.stage || {}, this.onframe = t.onframe || function() {}, 
        this._clips = [], this._running = !1, this._time, this._pausedTime, this._pauseStart, 
        this._paused = !1, gs.call(this);
    }
    (ku = function(t, e, n) {
        this.type = "canvas";
        var i = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
        this._opts = n = M({}, n || {}), this.dpr = n.devicePixelRatio || Ws, this._singleCanvas = i, 
        (r = (this.root = t).style) && (r["-webkit-tap-highlight-color"] = "transparent", 
        r["-webkit-user-select"] = r["user-select"] = r["-webkit-touch-callout"] = "none", 
        t.innerHTML = ""), this.storage = e;
        var o, r = this._zlevelList = [], e = this._layers = {};
        this._layerConfig = {}, this._needsManuallyCompositing = !1, i ? (i = t.width, o = t.height, 
        null != n.width && (i = n.width), null != n.height && (o = n.height), this.dpr = n.devicePixelRatio || 1, 
        t.width = i * this.dpr, t.height = o * this.dpr, this._width = i, this._height = o, 
        (o = new fl(t, this, this.dpr)).__builtin__ = !0, o.initContext(), (e[kl] = o).zlevel = kl, 
        r.push(kl), this._domRoot = t) : (this._width = this._getSize(0), this._height = this._getSize(1), 
        r = this._domRoot = (e = this._width, o = this._height, (r = document.createElement("div")).style.cssText = [ "position:relative", "overflow:hidden", "width:" + e + "px", "height:" + o + "px", "padding:0", "margin:0", "border-width:0" ].join(";") + ";", 
        r), t.appendChild(r)), this._hoverlayer = null, this._hoverElements = [];
    }).prototype = {
        constructor: ku,
        getType: function() {
            return "canvas";
        },
        isSingleCanvas: function() {
            return this._singleCanvas;
        },
        getViewportRoot: function() {
            return this._domRoot;
        },
        getViewportRootOffset: function() {
            var t = this.getViewportRoot();
            return t ? {
                offsetLeft: t.offsetLeft || 0,
                offsetTop: t.offsetTop || 0
            } : void 0;
        },
        refresh: function(t) {
            var e = this.storage.getDisplayList(!0), n = this._zlevelList;
            this._redrawId = Math.random(), this._paintList(e, t, this._redrawId);
            for (var i = 0; i < n.length; i++) {
                var o = n[i], r = this._layers[o];
                !r.__builtin__ && r.refresh && (o = 0 === i ? this._backgroundColor : null, r.refresh(o));
            }
            return this.refreshHover(), this;
        },
        addHover: function(t, e) {
            if (!t.__hoverMir) {
                var n = new t.constructor({
                    style: t.style,
                    shape: t.shape,
                    z: t.z,
                    z2: t.z2,
                    silent: t.silent
                });
                return (n.__from = t).__hoverMir = n, e && n.setStyle(e), this._hoverElements.push(n), 
                n;
            }
        },
        removeHover: function(t) {
            var e = t.__hoverMir, n = this._hoverElements;
            0 <= (e = m(n, e)) && n.splice(e, 1), t.__hoverMir = null;
        },
        clearHover: function() {
            for (var t = this._hoverElements, e = 0; e < t.length; e++) {
                var n = t[e].__from;
                n && (n.__hoverMir = null);
            }
            t.length = 0;
        },
        refreshHover: function() {
            var t = this._hoverElements, e = t.length, n = this._hoverlayer;
            if (n && n.clear(), e) {
                Bt(t, this.storage.displayableSortFunc);
                var i = {};
                (n = n || (this._hoverlayer = this.getLayer(1e5))).ctx.save();
                for (var o = 0; o < e; ) {
                    var r = t[o], a = r.__from;
                    a && a.__zr ? (o++, a.invisible || (r.transform = a.transform, r.invTransform = a.invTransform, 
                    r.__clipPaths = a.__clipPaths, this._doPaintEl(r, n, !0, i))) : (t.splice(o, 1), 
                    a.__hoverMir = null, e--);
                }
                n.ctx.restore();
            }
        },
        getHoverLayer: function() {
            return this.getLayer(1e5);
        },
        _paintList: function(t, e, n) {
            var i, o;
            this._redrawId === n && (e = e || !1, this._updateLayerStatus(t), i = this._doPaintList(t, e), 
            this._needsManuallyCompositing && this._compositeManually(), i || (o = this, pl(function() {
                o._paintList(t, e, n);
            })));
        },
        _compositeManually: function() {
            var e = this.getLayer(kl).ctx, n = this._domRoot.width, i = this._domRoot.height;
            e.clearRect(0, 0, n, i), this.eachBuiltinLayer(function(t) {
                t.virtual && e.drawImage(t.dom, 0, 0, n, i);
            });
        },
        _doPaintList: function(t, e) {
            for (var n = [], i = 0; i < this._zlevelList.length; i++) {
                var o = this._zlevelList[i];
                (s = this._layers[o]).__builtin__ && s !== this._hoverlayer && (s.__dirty || e) && n.push(s);
            }
            for (var r = !0, a = 0; a < n.length; a++) {
                var s, l = (s = n[a]).ctx, h = {};
                l.save();
                var u, c = e ? s.__startIndex : s.__drawIndex, d = !e && s.incremental && Date.now, f = d && Date.now(), p = s.zlevel === this._zlevelList[0] ? this._backgroundColor : null;
                s.__startIndex === s.__endIndex ? s.clear(!1, p) : c === s.__startIndex && ((u = t[c]).incremental && u.notClear && !e || s.clear(!1, p)), 
                -1 === c && (console.error("For some unknown reason. drawIndex is -1"), c = s.__startIndex);
                for (var g = c; g < s.__endIndex; g++) {
                    var m = t[g];
                    if (this._doPaintEl(m, s, e, h), m.__dirty = m.__dirtyText = !1, d && 15 < Date.now() - f) break;
                }
                s.__drawIndex = g, s.__drawIndex < s.__endIndex && (r = !1), h.prevElClipPaths && l.restore(), 
                l.restore();
            }
            return ts.wxa && I(this._layers, function(t) {
                t && t.ctx && t.ctx.draw && t.ctx.draw();
            }), r;
        },
        _doPaintEl: function(t, e, n, i) {
            var o, r, a = e.ctx, s = t.transform;
            !e.__dirty && !n || t.invisible || 0 === t.style.opacity || s && !s[0] && !s[3] || t.culling && (s = t, 
            o = this._width, r = this._height, Al.copy(s.getBoundingRect()), s.transform && Al.applyTransform(s.transform), 
            Pl.width = o, Pl.height = r, !Al.intersect(Pl)) || (o = t.__clipPaths, (r = i.prevElClipPaths) && !function(t, e) {
                if (t !== e) {
                    if (!t || !e || t.length !== e.length) return 1;
                    for (var n = 0; n < t.length; n++) if (t[n] !== e[n]) return 1;
                }
            }(o, r) || (r && (a.restore(), i.prevElClipPaths = null, i.prevEl = null), o && (a.save(), 
            function(t, e) {
                for (var n = 0; n < t.length; n++) {
                    var i = t[n];
                    i.setTransform(e), e.beginPath(), i.buildPath(e, i.shape), e.clip(), i.restoreTransform(e);
                }
            }(o, a), i.prevElClipPaths = o)), t.beforeBrush && t.beforeBrush(a), t.brush(a, i.prevEl || null), 
            (i.prevEl = t).afterBrush && t.afterBrush(a));
        },
        getLayer: function(t, e) {
            this._singleCanvas && !this._needsManuallyCompositing && (t = kl);
            var n = this._layers[t];
            return n || ((n = new fl("zr_" + t, this, this.dpr)).zlevel = t, n.__builtin__ = !0, 
            this._layerConfig[t] && g(n, this._layerConfig[t], !0), e && (n.virtual = e), this.insertLayer(t, n), 
            n.initContext()), n;
        },
        insertLayer: function(t, e) {
            var n = this._layers, i = this._zlevelList, o = i.length, r = null, a = -1, s = this._domRoot;
            if (n[t]) Gs("ZLevel " + t + " has been used already"); else if (e && (e.__builtin__ || "function" == typeof e.resize && "function" == typeof e.refresh)) {
                if (0 < o && t > i[0]) {
                    for (a = 0; a < o - 1 && !(i[a] < t && i[a + 1] > t); a++) ;
                    r = n[i[a]];
                }
                i.splice(a + 1, 0, t), (n[t] = e).virtual || (r ? (r = r.dom).nextSibling ? s.insertBefore(e.dom, r.nextSibling) : s.appendChild(e.dom) : s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom));
            } else Gs("Layer of zlevel " + t + " is not valid");
        },
        eachLayer: function(t, e) {
            for (var n, i = this._zlevelList, o = 0; o < i.length; o++) n = i[o], t.call(e, this._layers[n], n);
        },
        eachBuiltinLayer: function(t, e) {
            for (var n, i, o = this._zlevelList, r = 0; r < o.length; r++) i = o[r], (n = this._layers[i]).__builtin__ && t.call(e, n, i);
        },
        eachOtherLayer: function(t, e) {
            for (var n, i, o = this._zlevelList, r = 0; r < o.length; r++) i = o[r], (n = this._layers[i]).__builtin__ || t.call(e, n, i);
        },
        getLayers: function() {
            return this._layers;
        },
        _updateLayerStatus: function(t) {
            function e(t) {
                i && (i.__endIndex !== t && (i.__dirty = !0), i.__endIndex = t);
            }
            if (this.eachBuiltinLayer(function(t) {
                t.__dirty = t.__used = !1;
            }), this._singleCanvas) for (var n = 1; n < t.length; n++) if ((a = t[n]).zlevel !== t[n - 1].zlevel || a.incremental) {
                this._needsManuallyCompositing = !0;
                break;
            }
            for (var i = null, o = 0, n = 0; n < t.length; n++) {
                var r, a, s = (a = t[n]).zlevel;
                a.incremental ? ((r = this.getLayer(s + .001, this._needsManuallyCompositing)).incremental = !0, 
                o = 1) : r = this.getLayer(s + (0 < o ? .01 : 0), this._needsManuallyCompositing), 
                r.__builtin__ || Gs("ZLevel " + s + " has been used by unkown layer " + r.id), r !== i && (r.__used = !0, 
                r.__startIndex !== n && (r.__dirty = !0), r.__startIndex = n, r.__drawIndex = r.incremental ? -1 : n, 
                e(n), i = r), a.__dirty && (r.__dirty = !0, r.incremental && r.__drawIndex < 0 && (r.__drawIndex = n));
            }
            e(n), this.eachBuiltinLayer(function(t) {
                !t.__used && 0 < t.getElementCount() && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0), 
                t.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex);
            });
        },
        clear: function() {
            return this.eachBuiltinLayer(this._clearLayer), this;
        },
        _clearLayer: function(t) {
            t.clear();
        },
        setBackgroundColor: function(t) {
            this._backgroundColor = t;
        },
        configLayer: function(t, e) {
            if (e) {
                var n = this._layerConfig;
                n[t] ? g(n[t], e, !0) : n[t] = e;
                for (var i = 0; i < this._zlevelList.length; i++) {
                    var o = this._zlevelList[i];
                    o !== t && o !== t + .01 || g(this._layers[o], n[t], !0);
                }
            }
        },
        delLayer: function(t) {
            var e = this._layers, n = this._zlevelList, i = e[t];
            i && (i.dom.parentNode.removeChild(i.dom), delete e[t], n.splice(m(n, t), 1));
        },
        resize: function(e, n) {
            if (this._domRoot.style) {
                var t = this._domRoot;
                t.style.display = "none";
                var i = this._opts;
                if (null != e && (i.width = e), null != n && (i.height = n), e = this._getSize(0), 
                n = this._getSize(1), t.style.display = "", this._width !== e || n !== this._height) {
                    for (var o in t.style.width = e + "px", t.style.height = n + "px", this._layers) this._layers.hasOwnProperty(o) && this._layers[o].resize(e, n);
                    I(this._progressiveLayers, function(t) {
                        t.resize(e, n);
                    }), this.refresh(!0);
                }
                this._width = e, this._height = n;
            } else {
                if (null == e || null == n) return;
                this._width = e, this._height = n, this.getLayer(kl).resize(e, n);
            }
            return this;
        },
        clearLayer: function(t) {
            (t = this._layers[t]) && t.clear();
        },
        dispose: function() {
            this.root.innerHTML = "", this.root = this.storage = this._domRoot = this._layers = null;
        },
        getRenderedCanvas: function(t) {
            if (t = t || {}, this._singleCanvas && !this._compositeManually) return this._layers[kl].dom;
            var e = new fl("image", this, t.pixelRatio || this.dpr);
            if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) {
                this.refresh();
                var n = e.dom.width, i = e.dom.height, o = e.ctx;
                this.eachLayer(function(t) {
                    t.__builtin__ ? o.drawImage(t.dom, 0, 0, n, i) : t.renderToCanvas && (e.ctx.save(), 
                    t.renderToCanvas(e.ctx), e.ctx.restore());
                });
            } else for (var r = {}, a = this.storage.getDisplayList(!0), s = 0; s < a.length; s++) {
                var l = a[s];
                this._doPaintEl(l, e, !0, r);
            }
            return e.dom;
        },
        getWidth: function() {
            return this._width;
        },
        getHeight: function() {
            return this._height;
        },
        _getSize: function(t) {
            var e = this._opts, n = [ "width", "height" ][t], i = [ "clientWidth", "clientHeight" ][t], o = [ "paddingLeft", "paddingTop" ][t], r = [ "paddingRight", "paddingBottom" ][t];
            return null != e[n] && "auto" !== e[n] ? parseFloat(e[n]) : (t = this.root, e = document.defaultView.getComputedStyle(t), 
            (t[i] || ve(e[n]) || ve(t.style[n])) - (ve(e[o]) || 0) - (ve(e[r]) || 0) | 0);
        },
        pathToImage: function(t, e) {
            e = e || this.dpr;
            var n = document.createElement("canvas"), i = n.getContext("2d"), o = t.getBoundingRect(), r = (u = t.style).shadowBlur * e, a = u.shadowOffsetX * e, s = u.shadowOffsetY * e, l = u.hasStroke() ? u.lineWidth : 0, h = Math.max(l / 2, r - a), u = Math.max(l / 2, a + r), a = Math.max(l / 2, r - s), r = Math.max(l / 2, s + r), u = o.width + h + u, r = o.height + a + r;
            return n.width = u * e, n.height = r * e, i.scale(e, e), i.clearRect(0, 0, u, r), 
            i.dpr = e, e = {
                position: t.position,
                rotation: t.rotation,
                scale: t.scale
            }, t.position = [ h - o.x, a - o.y ], t.rotation = 0, t.scale = [ 1, 1 ], t.updateTransform(), 
            t && t.brush(i), n = new ye({
                style: {
                    x: 0,
                    y: 0,
                    image: n
                }
            }), null != e.position && (n.position = t.position = e.position), null != e.rotation && (n.rotation = t.rotation = e.rotation), 
            null != e.scale && (n.scale = t.scale = e.scale), n;
        }
    }, Ol.prototype = {
        constructor: Ol,
        addClip: function(t) {
            this._clips.push(t);
        },
        addAnimator: function(t) {
            t.animation = this;
            for (var e = t.getClips(), n = 0; n < e.length; n++) this.addClip(e[n]);
        },
        removeClip: function(t) {
            0 <= (t = m(this._clips, t)) && this._clips.splice(t, 1);
        },
        removeAnimator: function(t) {
            for (var e = t.getClips(), n = 0; n < e.length; n++) this.removeClip(e[n]);
            t.animation = null;
        },
        _update: function() {
            for (var t = new Date().getTime() - this._pausedTime, e = t - this._time, n = this._clips, i = n.length, o = [], r = [], a = 0; a < i; a++) {
                var s = n[a], l = s.step(t, e);
                l && (o.push(l), r.push(s));
            }
            for (a = 0; a < i; ) n[a]._needsRemove ? (n[a] = n[i - 1], n.pop(), i--) : a++;
            for (i = o.length, a = 0; a < i; a++) r[a].fire(o[a]);
            this._time = t, this.onframe(e), this.trigger("frame", e), this.stage.update && this.stage.update();
        },
        _startLoop: function() {
            var e = this;
            this._running = !0, pl(function t() {
                e._running && (pl(t), e._paused || e._update());
            });
        },
        start: function() {
            this._time = new Date().getTime(), this._pausedTime = 0, this._startLoop();
        },
        stop: function() {
            this._running = !1;
        },
        pause: function() {
            this._paused || (this._pauseStart = new Date().getTime(), this._paused = !0);
        },
        resume: function() {
            this._paused && (this._pausedTime += new Date().getTime() - this._pauseStart, this._paused = !1);
        },
        clear: function() {
            this._clips = [];
        },
        isFinished: function() {
            return !this._clips.length;
        },
        animate: function(t, e) {
            return e = new Bs(t, (e = e || {}).loop, e.getter, e.setter), this.addAnimator(e), 
            e;
        }
    }, e(Ol, gs);
    var Ll = [ "click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu" ], El = [ "touchstart", "touchend", "touchmove" ], Bl = {
        pointerdown: 1,
        pointerup: 1,
        pointermove: 1,
        pointerout: 1
    }, zl = b(Ll, function(t) {
        var e = t.replace("mouse", "pointer");
        return Bl[e] ? e : t;
    }), Rl = {
        mousemove: function(t) {
            t = Z(this.dom, t), this.trigger("mousemove", t);
        },
        mouseout: function(t) {
            var e = (t = Z(this.dom, t)).toElement || t.relatedTarget;
            if (e !== this.dom) for (;e && 9 !== e.nodeType; ) {
                if (e === this.dom) return;
                e = e.parentNode;
            }
            this.trigger("mouseout", t);
        },
        touchstart: function(t) {
            (t = Z(this.dom, t)).zrByTouch = !0, this._lastTouchMoment = new Date(), this.handler.processGesture(this, t, "start"), 
            Rl.mousemove.call(this, t), Rl.mousedown.call(this, t), xe(this);
        },
        touchmove: function(t) {
            (t = Z(this.dom, t)).zrByTouch = !0, this.handler.processGesture(this, t, "change"), 
            Rl.mousemove.call(this, t), xe(this);
        },
        touchend: function(t) {
            (t = Z(this.dom, t)).zrByTouch = !0, this.handler.processGesture(this, t, "end"), 
            Rl.mouseup.call(this, t), +new Date() - this._lastTouchMoment < 300 && Rl.click.call(this, t), 
            xe(this);
        },
        pointerdown: function(t) {
            Rl.mousedown.call(this, t);
        },
        pointermove: function(t) {
            we(t) || Rl.mousemove.call(this, t);
        },
        pointerup: function(t) {
            Rl.mouseup.call(this, t);
        },
        pointerout: function(t) {
            we(t) || Rl.mouseout.call(this, t);
        }
    };
    I([ "click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu" ], function(e) {
        Rl[e] = function(t) {
            t = Z(this.dom, t), this.trigger(e, t);
        };
    }), (Du = be.prototype).dispose = function() {
        for (var t = Ll.concat(El), e = 0; e < t.length; e++) {
            var n = t[e], i = this.dom, o = _e(n), n = this._handlers[n];
            vs ? i.removeEventListener(o, n) : i.detachEvent("on" + o, n);
        }
    }, Du.setCursor = function(t) {
        this.dom.style && (this.dom.style.cursor = t || "default");
    }, e(be, gs);
    var Nl = !ts.canvasSupported, Fl = {
        canvas: ku
    }, Hl = function(t, e, n) {
        n = n || {}, this.dom = e, this.id = t;
        var i = this, o = new Js(), r = n.renderer;
        if (Nl) {
            if (!Fl.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8");
            r = "vml";
        } else r && Fl[r] || (r = "canvas");
        n = new Fl[r](e, o, n, t), this.storage = o, this.painter = n, t = ts.node || ts.worker ? null : new be(n.getViewportRoot()), 
        this.handler = new Ms(o, n, t, n.root), this.animation = new Ol({
            stage: {
                update: v(this.flush, this)
            }
        }), this.animation.start(), this._needsRefresh;
        var a = o.delFromStorage, s = o.addToStorage;
        o.delFromStorage = function(t) {
            a.call(o, t), t && t.removeSelfFromZr(i);
        }, o.addToStorage = function(t) {
            s.call(o, t), t.addSelfToZr(i);
        };
    };
    Hl.prototype = {
        constructor: Hl,
        getId: function() {
            return this.id;
        },
        add: function(t) {
            this.storage.addRoot(t), this._needsRefresh = !0;
        },
        remove: function(t) {
            this.storage.delRoot(t), this._needsRefresh = !0;
        },
        configLayer: function(t, e) {
            this.painter.configLayer && this.painter.configLayer(t, e), this._needsRefresh = !0;
        },
        setBackgroundColor: function(t) {
            this.painter.setBackgroundColor && this.painter.setBackgroundColor(t), this._needsRefresh = !0;
        },
        refreshImmediately: function() {
            this._needsRefresh = this._needsRefreshHover = !1, this.painter.refresh(), this._needsRefresh = this._needsRefreshHover = !1;
        },
        refresh: function() {
            this._needsRefresh = !0;
        },
        flush: function() {
            var t;
            this._needsRefresh && (t = !0, this.refreshImmediately()), this._needsRefreshHover && (t = !0, 
            this.refreshHoverImmediately()), t && this.trigger("rendered");
        },
        addHover: function(t, e) {
            if (this.painter.addHover) return e = this.painter.addHover(t, e), this.refreshHover(), 
            e;
        },
        removeHover: function(t) {
            this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover());
        },
        clearHover: function() {
            this.painter.clearHover && (this.painter.clearHover(), this.refreshHover());
        },
        refreshHover: function() {
            this._needsRefreshHover = !0;
        },
        refreshHoverImmediately: function() {
            this._needsRefreshHover = !1, this.painter.refreshHover && this.painter.refreshHover();
        },
        resize: function(t) {
            t = t || {}, this.painter.resize(t.width, t.height), this.handler.resize();
        },
        clearAnimation: function() {
            this.animation.clear();
        },
        getWidth: function() {
            return this.painter.getWidth();
        },
        getHeight: function() {
            return this.painter.getHeight();
        },
        pathToImage: function(t, e) {
            return this.painter.pathToImage(t, e);
        },
        setCursorStyle: function(t) {
            this.handler.setCursorStyle(t);
        },
        findHover: function(t, e) {
            return this.handler.findHover(t, e);
        },
        on: function(t, e, n) {
            this.handler.on(t, e, n);
        },
        off: function(t, e) {
            this.handler.off(t, e);
        },
        trigger: function(t, e) {
            this.handler.trigger(t, e);
        },
        clear: function() {
            this.storage.delRoot(), this.painter.clear();
        },
        dispose: function() {
            this.animation.stop(), this.clear(), this.storage.dispose(), this.painter.dispose(), 
            this.handler.dispose(), this.animation = this.storage = this.painter = this.handler = null;
        }
    };
    var Vl = I, Wl = D, Gl = x, Xl = "series\0", Ul = [ "fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding" ], Yl = 0, ql = ".", jl = "___EC__COMPONENT__CONTAINER___", Zl = 0, Kl = ($u = function(a) {
        for (var t = 0; t < a.length; t++) a[t][1] || (a[t][1] = a[t][0]);
        return function(t, e, n) {
            for (var i = {}, o = 0; o < a.length; o++) {
                var r = a[o][1];
                e && 0 <= m(e, r) || n && m(n, r) < 0 || null != (r = t.getShallow(r)) && (i[a[o][0]] = r);
            }
            return i;
        };
    })([ [ "lineWidth", "width" ], [ "stroke", "color" ], [ "opacity" ], [ "shadowBlur" ], [ "shadowOffsetX" ], [ "shadowOffsetY" ], [ "shadowColor" ] ]), $l = {
        getLineStyle: function(t) {
            return (t = Kl(this, t)).lineDash = this.getLineDash(t.lineWidth), t;
        },
        getLineDash: function(t) {
            null == t && (t = 1);
            var e = this.get("type"), n = Math.max(t, 2), t = 4 * t;
            return "solid" !== e && null != e && ("dashed" === e ? [ t, t ] : [ n, n ]);
        }
    }, Ql = $u([ [ "fill", "color" ], [ "shadowBlur" ], [ "shadowOffsetX" ], [ "shadowOffsetY" ], [ "opacity" ], [ "shadowColor" ] ]), Jl = {
        getAreaStyle: function(t, e) {
            return Ql(this, t, e);
        }
    }, th = Math.pow, eh = Math.sqrt, nh = 1e-8, ih = 1e-4, oh = eh(3), rh = 1 / 3, ah = n(), sh = n(), lh = n(), hh = Math.min, uh = Math.max, ch = Math.sin, dh = Math.cos, fh = 2 * Math.PI, ph = n(), gh = n(), mh = n(), yh = [], vh = [], _h = {
        M: 1,
        L: 2,
        C: 3,
        Q: 4,
        A: 5,
        Z: 6,
        R: 7
    }, xh = [], wh = [], bh = [], Sh = [], Mh = Math.min, Th = Math.max, Ih = Math.cos, Ch = Math.sin, Dh = Math.sqrt, kh = Math.abs, Ah = "undefined" != typeof Float32Array, Ph = function(t) {
        this._saveData = !t, this._saveData && (this.data = []), this._ctx = null;
    };
    Ph.prototype = {
        constructor: Ph,
        _xi: 0,
        _yi: 0,
        _x0: 0,
        _y0: 0,
        _ux: 0,
        _uy: 0,
        _len: 0,
        _lineDash: null,
        _dashOffset: 0,
        _dashIdx: 0,
        _dashSum: 0,
        setScale: function(t, e, n) {
            n = n || 0, this._ux = kh(n / Ws / t) || 0, this._uy = kh(n / Ws / e) || 0;
        },
        getContext: function() {
            return this._ctx;
        },
        beginPath: function(t) {
            return (this._ctx = t) && t.beginPath(), t && (this.dpr = t.dpr), this._saveData && (this._len = 0), 
            this._lineDash && (this._lineDash = null, this._dashOffset = 0), this;
        },
        moveTo: function(t, e) {
            return this.addData(_h.M, t, e), this._ctx && this._ctx.moveTo(t, e), this._x0 = t, 
            this._y0 = e, this._xi = t, this._yi = e, this;
        },
        lineTo: function(t, e) {
            var n = kh(t - this._xi) > this._ux || kh(e - this._yi) > this._uy || this._len < 5;
            return this.addData(_h.L, t, e), this._ctx && n && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)), 
            n && (this._xi = t, this._yi = e), this;
        },
        bezierCurveTo: function(t, e, n, i, o, r) {
            return this.addData(_h.C, t, e, n, i, o, r), this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, n, i, o, r) : this._ctx.bezierCurveTo(t, e, n, i, o, r)), 
            this._xi = o, this._yi = r, this;
        },
        quadraticCurveTo: function(t, e, n, i) {
            return this.addData(_h.Q, t, e, n, i), this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, n, i) : this._ctx.quadraticCurveTo(t, e, n, i)), 
            this._xi = n, this._yi = i, this;
        },
        arc: function(t, e, n, i, o, r) {
            return this.addData(_h.A, t, e, n, n, i, o - i, 0, r ? 0 : 1), this._ctx && this._ctx.arc(t, e, n, i, o, r), 
            this._xi = Ih(o) * n + t, this._yi = Ch(o) * n + e, this;
        },
        arcTo: function(t, e, n, i, o) {
            return this._ctx && this._ctx.arcTo(t, e, n, i, o), this;
        },
        rect: function(t, e, n, i) {
            return this._ctx && this._ctx.rect(t, e, n, i), this.addData(_h.R, t, e, n, i), 
            this;
        },
        closePath: function() {
            this.addData(_h.Z);
            var t = this._ctx, e = this._x0, n = this._y0;
            return t && (this._needsDash() && this._dashedLineTo(e, n), t.closePath()), this._xi = e, 
            this._yi = n, this;
        },
        fill: function(t) {
            t && t.fill(), this.toStatic();
        },
        stroke: function(t) {
            t && t.stroke(), this.toStatic();
        },
        setLineDash: function(t) {
            if (t instanceof Array) {
                this._lineDash = t;
                for (var e = this._dashIdx = 0, n = 0; n < t.length; n++) e += t[n];
                this._dashSum = e;
            }
            return this;
        },
        setLineDashOffset: function(t) {
            return this._dashOffset = t, this;
        },
        len: function() {
            return this._len;
        },
        setData: function(t) {
            var e = t.length;
            this.data && this.data.length === e || !Ah || (this.data = new Float32Array(e));
            for (var n = 0; n < e; n++) this.data[n] = t[n];
            this._len = e;
        },
        appendPath: function(t) {
            t instanceof Array || (t = [ t ]);
            for (var e = t.length, n = 0, i = this._len, o = 0; o < e; o++) n += t[o].len();
            for (Ah && this.data instanceof Float32Array && (this.data = new Float32Array(i + n)), 
            o = 0; o < e; o++) for (var r = t[o].data, a = 0; a < r.length; a++) this.data[i++] = r[a];
            this._len = i;
        },
        addData: function(t) {
            if (this._saveData) {
                var e = this.data;
                this._len + arguments.length > e.length && (this._expandData(), e = this.data);
                for (var n = 0; n < arguments.length; n++) e[this._len++] = arguments[n];
                this._prevCmd = t;
            }
        },
        _expandData: function() {
            if (!(this.data instanceof Array)) {
                for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e];
                this.data = t;
            }
        },
        _needsDash: function() {
            return this._lineDash;
        },
        _dashedLineTo: function(t, e) {
            var n, i, o = this._dashSum, r = this._dashOffset, a = this._lineDash, s = this._ctx, l = this._xi, h = this._yi, u = t - l, c = e - h, d = Dh(u * u + c * c), f = l, p = h, g = a.length;
            for (r < 0 && (r = o + r), f -= (r %= o) * (u /= d), p -= r * (c /= d); 0 < u && f <= t || u < 0 && t <= f || 0 === u && (0 < c && p <= e || c < 0 && e <= p); ) f += u * (n = a[i = this._dashIdx]), 
            p += c * n, this._dashIdx = (i + 1) % g, 0 < u && f < l || u < 0 && l < f || 0 < c && p < h || c < 0 && h < p || s[i % 2 ? "moveTo" : "lineTo"]((0 <= u ? Mh : Th)(f, t), (0 <= c ? Mh : Th)(p, e));
            u = f - t, c = p - e, this._dashOffset = -Dh(u * u + c * c);
        },
        _dashedBezierTo: function(t, e, n, i, o, r) {
            var a, s, l, h, u, c = this._dashSum, d = this._dashOffset, f = this._lineDash, p = this._ctx, g = this._xi, m = this._yi, y = Xe, v = 0, _ = this._dashIdx, x = f.length, w = 0;
            for (d < 0 && (d = c + d), d %= c, a = 0; a < 1; a += .1) s = y(g, t, n, o, a + .1) - y(g, t, n, o, a), 
            l = y(m, e, i, r, a + .1) - y(m, e, i, r, a), v += Dh(s * s + l * l);
            for (;_ < x && !(d < (w += f[_])); _++) ;
            for (a = (w - d) / v; a <= 1; ) h = y(g, t, n, o, a), u = y(m, e, i, r, a), _ % 2 ? p.moveTo(h, u) : p.lineTo(h, u), 
            a += f[_] / v, _ = (_ + 1) % x;
            _ % 2 != 0 && p.lineTo(o, r), s = o - h, l = r - u, this._dashOffset = -Dh(s * s + l * l);
        },
        _dashedQuadraticTo: function(t, e, n, i) {
            var o = n, r = i;
            n = (n + 2 * t) / 3, i = (i + 2 * e) / 3, t = (this._xi + 2 * t) / 3, e = (this._yi + 2 * e) / 3, 
            this._dashedBezierTo(t, e, n, i, o, r);
        },
        toStatic: function() {
            var t = this.data;
            t instanceof Array && (t.length = this._len, Ah && (this.data = new Float32Array(t)));
        },
        getBoundingRect: function() {
            xh[0] = xh[1] = bh[0] = bh[1] = Number.MAX_VALUE, wh[0] = wh[1] = Sh[0] = Sh[1] = -Number.MAX_VALUE;
            for (var t, e, n, i, o = this.data, r = 0, a = 0, s = 0, l = 0, h = 0; h < o.length; ) {
                var u = o[h++];
                switch (1 === h && (s = r = o[h], l = a = o[h + 1]), u) {
                  case _h.M:
                    r = s = o[h++], a = l = o[h++], bh[0] = s, bh[1] = l, Sh[0] = s, Sh[1] = l;
                    break;

                  case _h.L:
                    Qe(r, a, o[h], o[h + 1], bh, Sh), r = o[h++], a = o[h++];
                    break;

                  case _h.C:
                    (function(t, e, n, i, o, r, a, s, l, h) {
                        var u, c = Ye, d = Xe, f = c(t, n, o, a, yh);
                        for (l[0] = 1 / 0, l[1] = 1 / 0, h[0] = -1 / 0, h[1] = -1 / 0, u = 0; u < f; u++) {
                            var p = d(t, n, o, a, yh[u]);
                            l[0] = hh(p, l[0]), h[0] = uh(p, h[0]);
                        }
                        for (f = c(e, i, r, s, vh), u = 0; u < f; u++) {
                            var g = d(e, i, r, s, vh[u]);
                            l[1] = hh(g, l[1]), h[1] = uh(g, h[1]);
                        }
                        l[0] = hh(t, l[0]), h[0] = uh(t, h[0]), l[0] = hh(a, l[0]), h[0] = uh(a, h[0]), 
                        l[1] = hh(e, l[1]), h[1] = uh(e, h[1]), l[1] = hh(s, l[1]), h[1] = uh(s, h[1]);
                    })(r, a, o[h++], o[h++], o[h++], o[h++], o[h], o[h + 1], bh, Sh), r = o[h++], a = o[h++];
                    break;

                  case _h.Q:
                    c = r, g = a, t = o[h++], e = o[h++], d = o[h], m = o[h + 1], n = bh, p = Sh, y = f = i = void 0, 
                    i = je, f = uh(hh((y = Ke)(c, t, d), 1), 0), y = uh(hh(y(g, e, m), 1), 0), f = i(c, t, d, f), 
                    y = i(g, e, m, y), n[0] = hh(c, d, f), n[1] = hh(g, m, y), p[0] = uh(c, d, f), p[1] = uh(g, m, y), 
                    r = o[h++], a = o[h++];
                    break;

                  case _h.A:
                    var c = o[h++], d = o[h++], f = o[h++], p = o[h++], g = o[h++], m = o[h++] + g;
                    h += 1;
                    var y = 1 - o[h++];
                    1 === h && (s = Ih(g) * f + c, l = Ch(g) * p + d), function(t, e, n, i, o, r, a, s, l) {
                        var h = V, u = W, c = Math.abs(o - r);
                        if (c % fh < 1e-4 && 1e-4 < c) return s[0] = t - n, s[1] = e - i, l[0] = t + n, 
                        l[1] = e + i;
                        ph[0] = dh(o) * n + t, ph[1] = ch(o) * i + e, gh[0] = dh(r) * n + t, gh[1] = ch(r) * i + e, 
                        h(s, ph, gh), u(l, ph, gh), (o %= fh) < 0 && (o += fh), (r %= fh) < 0 && (r += fh), 
                        r < o && !a ? r += fh : o < r && a && (o += fh), a && (a = r, r = o, o = a);
                        for (var d = 0; d < r; d += Math.PI / 2) o < d && (mh[0] = dh(d) * n + t, mh[1] = ch(d) * i + e, 
                        h(s, mh, s), u(l, mh, l));
                    }(c, d, f, p, g, m, y, bh, Sh), r = Ih(m) * f + c, a = Ch(m) * p + d;
                    break;

                  case _h.R:
                    Qe(s = r = o[h++], l = a = o[h++], s + o[h++], l + o[h++], bh, Sh);
                    break;

                  case _h.Z:
                    r = s, a = l;
                }
                V(xh, xh, bh), W(wh, wh, Sh);
            }
            return 0 === h && (xh[0] = xh[1] = wh[0] = wh[1] = 0), new kt(xh[0], xh[1], wh[0] - xh[0], wh[1] - xh[1]);
        },
        rebuildPath: function(t) {
            for (var e, n, i, o, r = this.data, a = this._ux, s = this._uy, l = this._len, h = 0; h < l; ) {
                var u = r[h++];
                switch (1 === h && (e = i = r[h], n = o = r[h + 1]), u) {
                  case _h.M:
                    e = i = r[h++], n = o = r[h++], t.moveTo(i, o);
                    break;

                  case _h.L:
                    x = r[h++], w = r[h++], (kh(x - i) > a || kh(w - o) > s || h === l - 1) && (t.lineTo(x, w), 
                    i = x, o = w);
                    break;

                  case _h.C:
                    t.bezierCurveTo(r[h++], r[h++], r[h++], r[h++], r[h++], r[h++]), i = r[h - 2], o = r[h - 1];
                    break;

                  case _h.Q:
                    t.quadraticCurveTo(r[h++], r[h++], r[h++], r[h++]), i = r[h - 2], o = r[h - 1];
                    break;

                  case _h.A:
                    var c = r[h++], d = r[h++], f = r[h++], p = r[h++], g = r[h++], m = r[h++], y = r[h++], v = r[h++], _ = p < f ? f : p, x = p < f ? 1 : f / p, w = p < f ? p / f : 1, m = g + m;
                    .001 < Math.abs(f - p) ? (t.translate(c, d), t.rotate(y), t.scale(x, w), t.arc(0, 0, _, g, m, 1 - v), 
                    t.scale(1 / x, 1 / w), t.rotate(-y), t.translate(-c, -d)) : t.arc(c, d, _, g, m, 1 - v), 
                    1 === h && (e = Ih(g) * f + c, n = Ch(g) * p + d), i = Ih(m) * f + c, o = Ch(m) * p + d;
                    break;

                  case _h.R:
                    e = i = r[h], n = o = r[h + 1], t.rect(r[h++], r[h++], r[h++], r[h++]);
                    break;

                  case _h.Z:
                    t.closePath(), i = e, o = n;
                }
            }
        }
    }, Ph.CMD = _h;
    var Oh = 2 * Math.PI, Lh = 2 * Math.PI, Eh = Ph.CMD, Bh = 2 * Math.PI, zh = [ -1, -1, -1 ], Rh = [ -1, -1 ], Nh = dl.prototype.getCanvasPattern, Fh = Math.abs, Hh = new Ph(!0);
    function Vh(t) {
        return Math.sqrt(t[0] * t[0] + t[1] * t[1]);
    }
    function Wh(t) {
        me.call(this, t);
    }
    on.prototype = {
        constructor: on,
        type: "path",
        __dirtyPath: !0,
        strokeContainThreshold: 5,
        segmentIgnoreThreshold: 0,
        subPixelOptimize: !1,
        brush: function(t, e) {
            var n, i = this.style, o = this.path || Hh, r = i.hasStroke(), a = i.hasFill(), s = i.fill, l = i.stroke, h = a && !!s.colorStops, u = r && !!l.colorStops, c = a && !!s.image, d = r && !!l.image;
            i.bind(t, this, e), this.setTransform(t), this.__dirty && (h && (n = n || this.getBoundingRect(), 
            this._fillGradient = i.getGradient(t, s, n)), u && (n = n || this.getBoundingRect(), 
            this._strokeGradient = i.getGradient(t, l, n))), h ? t.fillStyle = this._fillGradient : c && (t.fillStyle = Nh.call(s, t)), 
            u ? t.strokeStyle = this._strokeGradient : d && (t.strokeStyle = Nh.call(l, t));
            var f, s = i.lineDash, u = i.lineDashOffset, d = !!t.setLineDash, l = this.getGlobalScale();
            o.setScale(l[0], l[1], this.segmentIgnoreThreshold), this.__dirtyPath || s && !d && r ? (o.beginPath(t), 
            s && !d && (o.setLineDash(s), o.setLineDashOffset(u)), this.buildPath(o, this.shape, !1), 
            this.path && (this.__dirtyPath = !1)) : (t.beginPath(), this.path.rebuildPath(t)), 
            a && (null != i.fillOpacity ? (f = t.globalAlpha, t.globalAlpha = i.fillOpacity * i.opacity, 
            o.fill(t), t.globalAlpha = f) : o.fill(t)), s && d && (t.setLineDash(s), t.lineDashOffset = u), 
            r && (null != i.strokeOpacity ? (f = t.globalAlpha, t.globalAlpha = i.strokeOpacity * i.opacity, 
            o.stroke(t), t.globalAlpha = f) : o.stroke(t)), s && d && t.setLineDash([]), null != i.text && (this.restoreTransform(t), 
            this.drawRectText(t, this.getBoundingRect()));
        },
        buildPath: function() {},
        createPathProxy: function() {
            this.path = new Ph();
        },
        getBoundingRect: function() {
            var t = this._rect, e = this.style, n = !t;
            if (n && (i = (i = this.path) || (this.path = new Ph()), this.__dirtyPath && (i.beginPath(), 
            this.buildPath(i, this.shape, !1)), t = i.getBoundingRect()), this._rect = t, e.hasStroke()) {
                var i, o = this._rectWithStroke || (this._rectWithStroke = t.clone());
                return (this.__dirty || n) && (o.copy(t), i = e.lineWidth, n = e.strokeNoScale ? this.getLineScale() : 1, 
                e.hasFill() || (i = Math.max(i, this.strokeContainThreshold || 4)), 1e-10 < n && (o.width += i / n, 
                o.height += i / n, o.x -= i / n / 2, o.y -= i / n / 2)), o;
            }
            return t;
        },
        contain: function(t, e) {
            var n = this.transformCoordToLocal(t, e), i = this.getBoundingRect(), o = this.style;
            if (t = n[0], e = n[1], i.contain(t, e)) {
                var r = this.path.data;
                if (o.hasStroke() && (n = o.lineWidth, 1e-10 < (i = o.strokeNoScale ? this.getLineScale() : 1) && (o.hasFill() || (n = Math.max(n, this.strokeContainThreshold)), 
                nn(r, n / i, !0, t, e)))) return !0;
                if (o.hasFill()) return nn(r, 0, !1, t, e);
            }
            return !1;
        },
        dirty: function(t) {
            null == t && (t = !0), t && (this.__dirtyPath = t, this._rect = null), this.__dirty = this.__dirtyText = !0, 
            this.__zr && this.__zr.refresh(), this.__clipTarget && this.__clipTarget.dirty();
        },
        animateShape: function(t) {
            return this.animate("shape", t);
        },
        attrKV: function(t, e) {
            "shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : me.prototype.attrKV.call(this, t, e);
        },
        setShape: function(t, e) {
            var n = this.shape;
            if (n) {
                if (D(t)) for (var i in t) t.hasOwnProperty(i) && (n[i] = t[i]); else n[t] = e;
                this.dirty(!0);
            }
            return this;
        },
        getLineScale: function() {
            var t = this.transform;
            return t && 1e-10 < Fh(t[0] - 1) && 1e-10 < Fh(t[3] - 1) ? Math.sqrt(Fh(t[0] * t[3] - t[2] * t[1])) : 1;
        }
    }, on.extend = function(o) {
        function t(t) {
            on.call(this, t), o.style && this.style.extendFrom(o.style, !1);
            var e = o.shape;
            if (e) {
                this.shape = this.shape || {};
                var n, i = this.shape;
                for (n in e) !i.hasOwnProperty(n) && e.hasOwnProperty(n) && (i[n] = e[n]);
            }
            o.init && o.init.call(this, t);
        }
        for (var e in r(t, on), o) "style" !== e && "shape" !== e && (t.prototype[e] = o[e]);
        return t;
    }, r(on, me);
    var Gh = Ph.CMD, Xh = [ [], [], [] ], Uh = Math.sqrt, Yh = Math.atan2, qh = function(t, e) {
        for (var n, i, o, r, a = t.data, s = Gh.M, l = Gh.C, h = Gh.L, u = Gh.R, c = Gh.A, d = Gh.Q, f = 0, p = 0; f < a.length; ) {
            switch (n = a[f++], p = f, i = 0, n) {
              case s:
              case h:
                i = 1;
                break;

              case l:
                i = 3;
                break;

              case d:
                i = 2;
                break;

              case c:
                var g = e[4], m = e[5], y = Uh(e[0] * e[0] + e[1] * e[1]), v = Uh(e[2] * e[2] + e[3] * e[3]), _ = Yh(-e[1] / v, e[0] / y);
                a[f] *= y, a[f++] += g, a[f] *= v, a[f++] += m, a[f++] *= y, a[f++] *= v, a[f++] += _, 
                a[f++] += _, p = f += 2;
                break;

              case u:
                r[0] = a[f++], r[1] = a[f++], H(r, r, e), a[p++] = r[0], a[p++] = r[1], r[0] += a[f++], 
                r[1] += a[f++], H(r, r, e), a[p++] = r[0], a[p++] = r[1];
            }
            for (o = 0; o < i; o++) (r = Xh[o])[0] = a[f++], r[1] = a[f++], H(r, r, e), a[p++] = r[0], 
            a[p++] = r[1];
        }
    }, jh = Math.sqrt, Zh = Math.sin, Kh = Math.cos, $h = Math.PI, Qh = function(t, e) {
        return (t[0] * e[0] + t[1] * e[1]) / (Vh(t) * Vh(e));
    }, Jh = function(t, e) {
        return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(Qh(t, e));
    }, tu = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi, eu = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;
    function nu(t) {
        this.colorStops = t || [];
    }
    Wh.prototype = {
        constructor: Wh,
        type: "text",
        brush: function(t, e) {
            var n = this.style;
            this.__dirty && ee(n), n.fill = n.stroke = n.shadowBlur = n.shadowColor = n.shadowOffsetX = n.shadowOffsetY = null;
            var i = n.text;
            return null != i && (i += ""), ge(i, n) ? (this.setTransform(t), ie(this, t, i, n, null, e), 
            void this.restoreTransform(t)) : void (t.__attrCachedBy = ol);
        },
        getBoundingRect: function() {
            var t, e = this.style;
            return this.__dirty && ee(e), this._rect || (null != (t = e.text) ? t += "" : t = "", 
            (t = Gt(e.text + "", e.font, e.textAlign, e.textVerticalAlign, e.textPadding, e.textLineHeight, e.rich)).x += e.x || 0, 
            t.y += e.y || 0, ce(e.textStroke, e.textStrokeWidth) && (e = e.textStrokeWidth, 
            t.x -= e / 2, t.y -= e / 2, t.width += e, t.height += e), this._rect = t), this._rect;
        }
    }, r(Wh, me);
    var iu = on.extend({
        type: "circle",
        shape: {
            cx: 0,
            cy: 0,
            r: 0
        },
        buildPath: function(t, e, n) {
            n && t.moveTo(e.cx + e.r, e.cy), t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0);
        }
    }), ou = [ [ "shadowBlur", 0 ], [ "shadowColor", "#000" ], [ "shadowOffsetX", 0 ], [ "shadowOffsetY", 0 ] ], ru = function(s) {
        return ts.browser.ie && 11 <= ts.browser.version ? function() {
            var t, e = this.__clipPaths, n = this.style;
            if (e) for (var i = 0; i < e.length; i++) {
                var o = (r = e[i]) && r.shape, r = r && r.type;
                if (o && ("sector" === r && o.startAngle === o.endAngle || "rect" === r && (!o.width || !o.height))) {
                    for (var a = 0; a < ou.length; a++) ou[a][2] = n[ou[a][0]], n[ou[a][0]] = ou[a][1];
                    t = !0;
                    break;
                }
            }
            if (s.apply(this, arguments), t) for (a = 0; a < ou.length; a++) n[ou[a][0]] = ou[a][2];
        } : s;
    }, au = on.extend({
        type: "sector",
        shape: {
            cx: 0,
            cy: 0,
            r0: 0,
            r: 0,
            startAngle: 0,
            endAngle: 2 * Math.PI,
            clockwise: !0
        },
        brush: ru(on.prototype.brush),
        buildPath: function(t, e) {
            var n = e.cx, i = e.cy, o = Math.max(e.r0 || 0, 0), r = Math.max(e.r, 0), a = e.startAngle, s = e.endAngle, l = e.clockwise, h = Math.cos(a), e = Math.sin(a);
            t.moveTo(h * o + n, e * o + i), t.lineTo(h * r + n, e * r + i), t.arc(n, i, r, a, s, !l), 
            t.lineTo(Math.cos(s) * o + n, Math.sin(s) * o + i), 0 !== o && t.arc(n, i, o, s, a, l), 
            t.closePath();
        }
    }), Hs = on.extend({
        type: "ring",
        shape: {
            cx: 0,
            cy: 0,
            r: 0,
            r0: 0
        },
        buildPath: function(t, e) {
            var n = e.cx, i = e.cy, o = 2 * Math.PI;
            t.moveTo(n + e.r, i), t.arc(n, i, e.r, 0, o, !1), t.moveTo(n + e.r0, i), t.arc(n, i, e.r0, 0, o, !0);
        }
    }), su = on.extend({
        type: "polygon",
        shape: {
            points: null,
            smooth: !1,
            smoothConstraint: null
        },
        buildPath: function(t, e) {
            ln(t, e, !0);
        }
    }), lu = on.extend({
        type: "polyline",
        shape: {
            points: null,
            smooth: !1,
            smoothConstraint: null
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            ln(t, e, !1);
        }
    }), hu = Math.round, uu = {}, cu = on.extend({
        type: "rect",
        shape: {
            r: 0,
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var n, i, o, r;
            this.subPixelOptimize ? (un(uu, e, this.style), n = uu.x, i = uu.y, o = uu.width, 
            r = uu.height, uu.r = e.r, e = uu) : (n = e.x, i = e.y, o = e.width, r = e.height), 
            e.r ? te(t, e) : t.rect(n, i, o, r), t.closePath();
        }
    }), du = {}, fu = on.extend({
        type: "line",
        shape: {
            x1: 0,
            y1: 0,
            x2: 0,
            y2: 0,
            percent: 1
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            var n, i, o, r = this.subPixelOptimize ? (hn(du, e, this.style), n = du.x1, i = du.y1, 
            o = du.x2, du.y2) : (n = e.x1, i = e.y1, o = e.x2, e.y2);
            0 !== (e = e.percent) && (t.moveTo(n, i), e < 1 && (o = n * (1 - e) + o * e, r = i * (1 - e) + r * e), 
            t.lineTo(o, r));
        },
        pointAt: function(t) {
            var e = this.shape;
            return [ e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t ];
        }
    }), pu = [], gu = on.extend({
        type: "bezier-curve",
        shape: {
            x1: 0,
            y1: 0,
            x2: 0,
            y2: 0,
            cpx1: 0,
            cpy1: 0,
            percent: 1
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            var n = e.x1, i = e.y1, o = e.x2, r = e.y2, a = e.cpx1, s = e.cpy1, l = e.cpx2, h = e.cpy2;
            0 !== (e = e.percent) && (t.moveTo(n, i), null == l || null == h ? (e < 1 && ($e(n, a, o, e, pu), 
            a = pu[1], o = pu[2], $e(i, s, r, e, pu), s = pu[1], r = pu[2]), t.quadraticCurveTo(a, s, o, r)) : (e < 1 && (qe(n, a, l, o, e, pu), 
            a = pu[1], l = pu[2], o = pu[3], qe(i, s, h, r, e, pu), s = pu[1], h = pu[2], r = pu[3]), 
            t.bezierCurveTo(a, s, l, h, o, r)));
        },
        pointAt: function(t) {
            return dn(this.shape, t, !1);
        },
        tangentAt: function(t) {
            return t = dn(this.shape, t, !0), t = n = e = t, 0 === (t = Math.sqrt(t[0] * t[0] + t[1] * t[1])) ? (e[0] = 0, 
            e[1] = 0) : (e[0] = n[0] / t, e[1] = n[1] / t), e;
            var e, n;
        }
    }), mu = on.extend({
        type: "arc",
        shape: {
            cx: 0,
            cy: 0,
            r: 0,
            startAngle: 0,
            endAngle: 2 * Math.PI,
            clockwise: !0
        },
        style: {
            stroke: "#000",
            fill: null
        },
        buildPath: function(t, e) {
            var n = e.cx, i = e.cy, o = Math.max(e.r, 0), r = e.startAngle, a = e.endAngle, s = e.clockwise, l = Math.cos(r), e = Math.sin(r);
            t.moveTo(l * o + n, e * o + i), t.arc(n, i, o, r, a, !s);
        }
    }), yu = on.extend({
        type: "compound",
        shape: {
            paths: null
        },
        _updatePathDirty: function() {
            for (var t = this.__dirtyPath, e = this.shape.paths, n = 0; n < e.length; n++) t = t || e[n].__dirtyPath;
            this.__dirtyPath = t, this.__dirty = this.__dirty || t;
        },
        beforeBrush: function() {
            this._updatePathDirty();
            for (var t = this.shape.paths || [], e = this.getGlobalScale(), n = 0; n < t.length; n++) t[n].path || t[n].createPathProxy(), 
            t[n].path.setScale(e[0], e[1], t[n].segmentIgnoreThreshold);
        },
        buildPath: function(t, e) {
            for (var n = e.paths || [], i = 0; i < n.length; i++) n[i].buildPath(t, n[i].shape, !0);
        },
        afterBrush: function() {
            for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1;
        },
        getBoundingRect: function() {
            return this._updatePathDirty(), on.prototype.getBoundingRect.call(this);
        }
    });
    function vu(t, e, n, i, o, r) {
        this.x = null == t ? 0 : t, this.y = null == e ? 0 : e, this.x2 = null == n ? 1 : n, 
        this.y2 = null == i ? 0 : i, this.type = "linear", this.global = r || !1, nu.call(this, o);
    }
    nu.prototype = {
        constructor: nu,
        addColorStop: function(t, e) {
            this.colorStops.push({
                offset: t,
                color: e
            });
        }
    }, vu.prototype = {
        constructor: vu
    }, r(vu, nu), (Bu = function(t, e, n, i, o) {
        this.x = null == t ? .5 : t, this.y = null == e ? .5 : e, this.r = null == n ? .5 : n, 
        this.type = "radial", this.global = o || !1, nu.call(this, i);
    }).prototype = {
        constructor: Bu
    }, r(Bu, nu), fn.prototype.incremental = !0, fn.prototype.clearDisplaybles = function() {
        this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.dirty(), 
        this.notClear = !1;
    }, fn.prototype.addDisplayable = function(t, e) {
        (e ? this._temporaryDisplayables : this._displayables).push(t), this.dirty();
    }, fn.prototype.addDisplayables = function(t, e) {
        e = e || !1;
        for (var n = 0; n < t.length; n++) this.addDisplayable(t[n], e);
    }, fn.prototype.eachPendingDisplayable = function(t) {
        for (var e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]);
        for (e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e]);
    }, fn.prototype.update = function() {
        this.updateTransform();
        for (var t = this._cursor; t < this._displayables.length; t++) (e = this._displayables[t]).parent = this, 
        e.update(), e.parent = null;
        for (var e, t = 0; t < this._temporaryDisplayables.length; t++) (e = this._temporaryDisplayables[t]).parent = this, 
        e.update(), e.parent = null;
    }, fn.prototype.brush = function(t) {
        for (var e = this._cursor; e < this._displayables.length; e++) (n = this._displayables[e]).beforeBrush && n.beforeBrush(t), 
        n.brush(t, e === this._cursor ? null : this._displayables[e - 1]), n.afterBrush && n.afterBrush(t);
        this._cursor = e;
        for (var n, e = 0; e < this._temporaryDisplayables.length; e++) (n = this._temporaryDisplayables[e]).beforeBrush && n.beforeBrush(t), 
        n.brush(t, 0 === e ? null : this._temporaryDisplayables[e - 1]), n.afterBrush && n.afterBrush(t);
        this._temporaryDisplayables = [], this.notClear = !0;
    };
    var _u = [];
    fn.prototype.getBoundingRect = function() {
        if (!this._rect) {
            for (var t = new kt(1 / 0, 1 / 0, -1 / 0, -1 / 0), e = 0; e < this._displayables.length; e++) {
                var n = this._displayables[e], i = n.getBoundingRect().clone();
                n.needLocalTransform() && i.applyTransform(n.getLocalTransform(_u)), t.union(i);
            }
            this._rect = t;
        }
        return this._rect;
    }, fn.prototype.contain = function(t, e) {
        var n = this.transformCoordToLocal(t, e);
        if (this.getBoundingRect().contain(n[0], n[1])) for (var i = 0; i < this._displayables.length; i++) if (this._displayables[i].contain(t, e)) return !0;
        return !1;
    }, r(fn, me);
    var xu = Math.max, wu = Math.min, bu = {}, Su = 1, Mu = "emphasis", Tu = "normal", Iu = 1, Cu = {}, Du = function(t, e) {
        for (var n = [], i = t.length, o = 0; o < i; o++) {
            var r = t[o];
            r.path || r.createPathProxy(), r.__dirtyPath && r.buildPath(r.path, r.shape, !0), 
            n.push(r.path);
        }
        return (e = new on(e)).createPathProxy(), e.buildPath = function(t) {
            t.appendPath(n);
            var e = t.getContext();
            e && t.rebuildPath(e);
        }, e;
    }, ku = cn, Au = L(), Pu = 0, Ou = (Object.freeze || Object)({
        Z2_EMPHASIS_LIFT: Su,
        CACHED_LABEL_STYLE_PROPERTIES: {
            color: "textFill",
            textBorderColor: "textStroke",
            textBorderWidth: "textStrokeWidth"
        },
        extendShape: pn,
        extendPath: function(t, e) {
            return on.extend(an(t, e));
        },
        makePath: gn,
        makeImage: mn,
        mergePath: Du,
        resizePath: vn,
        subPixelOptimizeLine: function(t) {
            return hn(t.shape, t.shape, t.style), t;
        },
        subPixelOptimizeRect: function(t) {
            return un(t.shape, t.shape, t.style), t;
        },
        subPixelOptimize: ku,
        setElementHoverStyle: Mn,
        setHoverStyle: An,
        setAsHighDownDispatcher: Pn,
        isHighDownDispatcher: On,
        getHighlightDigit: Ln,
        setLabelStyle: En,
        modifyLabelStyle: function(t, e, n) {
            var i = t.style;
            e && (Hn(i), t.setStyle(e), Fn(i)), i = t.__hoverStl, n && i && (Hn(i), M(i, n), 
            Fn(i));
        },
        setTextStyle: Bn,
        setText: function(t, e, n) {
            var i, o = {
                isRectText: !0
            };
            !1 === n ? i = !0 : o.autoColor = n, zn(t, e, o, i);
        },
        getFont: Vn,
        updateProps: Gn,
        initProps: Xn,
        getTransform: function(t, e) {
            for (var n = tt([]); t && t !== e; ) et(n, t.getLocalTransform(), n), t = t.parent;
            return n;
        },
        applyTransform: Un,
        transformDirection: function(t, e, n) {
            var i = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]), o = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]), o = Un(o = [ "left" === t ? -i : "right" === t ? i : 0, "top" === t ? -o : "bottom" === t ? o : 0 ], e, n);
            return Math.abs(o[0]) > Math.abs(o[1]) ? 0 < o[0] ? "right" : "left" : 0 < o[1] ? "bottom" : "top";
        },
        groupTransition: Yn,
        clipPointsByRect: function(t, n) {
            return b(t, function(t) {
                var e = t[0], e = xu(e, n.x);
                return e = wu(e, n.x + n.width), t = t[1], t = xu(t, n.y), [ e, t = wu(t, n.y + n.height) ];
            });
        },
        clipRectByRect: function(t, e) {
            var n = xu(t.x, e.x), i = wu(t.x + t.width, e.x + e.width), o = xu(t.y, e.y), e = wu(t.y + t.height, e.y + e.height);
            return n <= i && o <= e ? {
                x: n,
                y: o,
                width: i - n,
                height: e - o
            } : void 0;
        },
        createIcon: qn,
        linePolygonIntersect: function(t, e, n, i, o) {
            for (var r = 0, a = o[o.length - 1]; r < o.length; r++) {
                var s = o[r];
                if (jn(t, e, n, i, s[0], s[1], a[0], a[1])) return !0;
                a = s;
            }
        },
        lineLineIntersect: jn,
        Group: Qs,
        Image: ye,
        Text: Wh,
        Circle: iu,
        Sector: au,
        Ring: Hs,
        Polygon: su,
        Polyline: lu,
        Rect: cu,
        Line: fu,
        BezierCurve: gu,
        Arc: mu,
        IncrementalDisplayable: fn,
        CompoundPath: yu,
        LinearGradient: vu,
        RadialGradient: Bu,
        BoundingRect: kt
    }), Lu = [ "textStyle", "color" ], gu = {
        getTextColor: function(t) {
            var e = this.ecModel;
            return this.getShallow("color") || (!t && e ? e.get(Lu) : null);
        },
        getFont: function() {
            return Vn({
                fontStyle: this.getShallow("fontStyle"),
                fontWeight: this.getShallow("fontWeight"),
                fontSize: this.getShallow("fontSize"),
                fontFamily: this.getShallow("fontFamily")
            }, this.ecModel);
        },
        getTextRect: function(t) {
            return Gt(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow("baseline"), this.getShallow("padding"), this.getShallow("lineHeight"), this.getShallow("rich"), this.getShallow("truncateText"));
        }
    }, Eu = $u([ [ "fill", "color" ], [ "stroke", "borderColor" ], [ "lineWidth", "borderWidth" ], [ "opacity" ], [ "shadowBlur" ], [ "shadowOffsetX" ], [ "shadowOffsetY" ], [ "shadowColor" ], [ "textPosition" ], [ "textAlign" ] ]), yu = {
        getItemStyle: function(t, e) {
            return t = Eu(this, t, e), (e = this.getBorderLineDash()) && (t.lineDash = e), t;
        },
        getBorderLineDash: function() {
            var t = this.get("borderType");
            return "solid" === t || null == t ? null : "dashed" === t ? [ 5, 5 ] : [ 1, 1 ];
        }
    }, Bu = e, zu = Pe();
    function Ru(t, e) {
        return "{" + t + (null == e ? "" : e) + "}";
    }
    Zn.prototype = {
        constructor: Zn,
        init: null,
        mergeOption: function(t) {
            g(this.option, t, !0);
        },
        get: function(t, e) {
            return null == t ? this.option : Kn(this.option, this.parsePath(t), !e && $n(this, t));
        },
        getShallow: function(t, e) {
            var n = null == (n = this.option) ? n : n[t], e = !e && $n(this, t);
            return null == n && e && (n = e.getShallow(t)), n;
        },
        getModel: function(t, e) {
            var n;
            return new Zn(null == t ? this.option : Kn(this.option, t = this.parsePath(t)), e = e || (n = $n(this, t)) && n.getModel(t), this.ecModel);
        },
        isEmpty: function() {
            return null == this.option;
        },
        restoreData: function() {},
        clone: function() {
            return new this.constructor(S(this.option));
        },
        setReadOnly: function() {},
        parsePath: function(t) {
            return "string" == typeof t && (t = t.split(".")), t;
        },
        customizeGetParent: function(t) {
            zu(this).getParent = t;
        },
        isAnimationEnabled: function() {
            if (!ts.node) return null != this.option.animation ? !!this.option.animation : this.parentModel ? this.parentModel.isAnimationEnabled() : void 0;
        }
    }, Re(Zn), Ne(Zn), Bu(Zn, $l), Bu(Zn, Jl), Bu(Zn, gu), Bu(Zn, yu);
    var Nu, Fu, Hu, Vu = 0, Wu = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/, Gu = o, Xu = /([&<>"'])/g, Uu = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#39;"
    }, Yu = [ "a", "b", "c", "d", "e", "f", "g" ], qu = qt, ju = I, Zu = [ "left", "right", "top", "bottom", "width", "height" ], Ku = [ [ "width", "left", "right" ], [ "height", "top", "bottom" ] ], $u = (s(pi, "vertical"), 
    s(pi, "horizontal"), {
        getBoxLayoutParams: function() {
            return {
                left: this.get("left"),
                top: this.get("top"),
                right: this.get("right"),
                bottom: this.get("bottom"),
                width: this.get("width"),
                height: this.get("height")
            };
        }
    }), Qu = Pe(), Ju = Zn.extend({
        type: "component",
        id: "",
        name: "",
        mainType: "",
        subType: "",
        componentIndex: 0,
        defaultOption: null,
        ecModel: null,
        dependentModels: [],
        uid: null,
        layoutMode: null,
        $constructor: function(t, e, n, i) {
            Zn.call(this, t, e, n, i), this.uid = Qn("ec_cpt_model");
        },
        init: function(t, e, n) {
            this.mergeDefaultAndTheme(t, n);
        },
        mergeDefaultAndTheme: function(t, e) {
            var n = this.layoutMode, i = n ? yi(t) : {};
            g(t, e.getTheme().get(this.mainType)), g(t, this.getDefaultOption()), n && mi(t, i, n);
        },
        mergeOption: function(t) {
            g(this.option, t, !0);
            var e = this.layoutMode;
            e && mi(this.option, t, e);
        },
        optionUpdated: function() {},
        getDefaultOption: function() {
            var t = Qu(this);
            if (!t.defaultOption) {
                for (var e = [], n = this.constructor; n; ) {
                    var i = n.prototype.defaultOption;
                    i && e.push(i), n = n.superClass;
                }
                for (var o = {}, r = e.length - 1; 0 <= r; r--) o = g(o, e[r], !0);
                t.defaultOption = o;
            }
            return t.defaultOption;
        },
        getReferringComponents: function(t) {
            return this.ecModel.queryComponents({
                mainType: t,
                index: this.get(t + "Index", !0),
                id: this.get(t + "Id", !0)
            });
        }
    });
    function tc(t, e) {
        return t[e] || (t[e] = {
            predecessor: [],
            successor: []
        }), t[e];
    }
    Ve(Ju, {
        registerWhenExtend: !0
    }), Hu = {}, (Fu = Ju).registerSubTypeDefaulter = function(t, e) {
        t = ze(t), Hu[t.main] = e;
    }, Fu.determineSubType = function(t, e) {
        var n, i = e.type;
        return i || (n = ze(t).main, Fu.hasSubTypes(t) && Hu[n] && (i = Hu[n](e))), i;
    }, Nu = function(t) {
        var e = [];
        return I(Ju.getClassesByMainType(t), function(t) {
            e = e.concat(t.prototype.dependencies || []);
        }), e = b(e, function(t) {
            return ze(t).main;
        }), "dataset" !== t && m(e, "dataset") <= 0 && e.unshift("dataset"), e;
    }, Ju.topologicalTravel = function(t, e, n, i) {
        function o(t) {
            a[t].entryCount--, 0 === a[t].entryCount && s.push(t);
        }
        function r(t) {
            l[t] = !0, o(t);
        }
        if (t.length) {
            var a = (e = (f = {}, p = [], I(d = e, function(n) {
                var e, i, o = tc(f, n), t = o.originalDeps = Nu(n), t = (e = d, i = [], I(t, function(t) {
                    0 <= m(e, t) && i.push(t);
                }), i);
                o.entryCount = t.length, 0 === o.entryCount && p.push(n), I(t, function(t) {
                    m(o.predecessor, t) < 0 && o.predecessor.push(t);
                    var e = tc(f, t);
                    m(e.successor, t) < 0 && e.successor.push(n);
                });
            }), {
                graph: f,
                noEntryList: p
            })).graph, s = e.noEntryList, l = {};
            for (I(t, function(t) {
                l[t] = !0;
            }); s.length; ) {
                var h = s.pop(), u = a[h], c = !!l[h];
                c && (n.call(i, h, u.originalDeps.slice()), delete l[h]), I(u.successor, c ? r : o);
            }
            I(l, function() {
                throw new Error("Circle dependency may exists");
            });
        }
        var d, f, p;
    }, e(Ju, $u), $l = "", "undefined" != typeof navigator && ($l = navigator.platform || "");
    var ec = {
        color: [ "#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074", "#546570", "#c4ccd3" ],
        gradientColor: [ "#f6efa6", "#d88273", "#bf444c" ],
        textStyle: {
            fontFamily: $l.match(/^Win/) ? "Microsoft YaHei" : "sans-serif",
            fontSize: 12,
            fontStyle: "normal",
            fontWeight: "normal"
        },
        blendMode: null,
        animation: "auto",
        animationDuration: 1e3,
        animationDurationUpdate: 300,
        animationEasing: "exponentialOut",
        animationEasingUpdate: "cubicOut",
        animationThreshold: 2e3,
        progressiveThreshold: 3e3,
        progressive: 400,
        hoverLayerThreshold: 3e3,
        useUTC: !1
    }, nc = Pe(), ic = {
        clearColorPalette: function() {
            nc(this).colorIdx = 0, nc(this).colorNameMap = {};
        },
        getColorFromPalette: function(t, e, n) {
            var i = nc(e = e || this), o = i.colorIdx || 0, r = i.colorNameMap = i.colorNameMap || {};
            if (r.hasOwnProperty(t)) return r[t];
            var a = Me(this.get("color", !0)), e = this.get("colorLayer", !0);
            return (n = (n = null != n && e ? function(t, e) {
                for (var n = t.length, i = 0; i < n; i++) if (t[i].length > e) return t[i];
                return t[n - 1];
            }(e, n) : a) || a) && n.length ? (a = n[o], t && (r[t] = a), i.colorIdx = (o + 1) % n.length, 
            a) : void 0;
        }
    }, oc = {
        cartesian2d: function(t, e, n, i) {
            var o = t.getReferringComponents("xAxis")[0], r = t.getReferringComponents("yAxis")[0];
            if ($a) {
                if (!o) throw new Error('xAxis "' + _(t.get("xAxisIndex"), t.get("xAxisId"), 0) + '" not found');
                if (!r) throw new Error('yAxis "' + _(t.get("xAxisIndex"), t.get("yAxisId"), 0) + '" not found');
            }
            e.coordSysDims = [ "x", "y" ], n.set("x", o), n.set("y", r), _i(o) && (i.set("x", o), 
            e.firstCategoryDimIndex = 0), _i(r) && (i.set("y", r), e.firstCategoryDimIndex = 1);
        },
        singleAxis: function(t, e, n, i) {
            if (t = t.getReferringComponents("singleAxis")[0], $a && !t) throw new Error("singleAxis should be specified.");
            e.coordSysDims = [ "single" ], n.set("single", t), _i(t) && (i.set("single", t), 
            e.firstCategoryDimIndex = 0);
        },
        polar: function(t, e, n, i) {
            var t = (o = t.getReferringComponents("polar")[0]).findAxisModel("radiusAxis"), o = o.findAxisModel("angleAxis");
            if ($a) {
                if (!o) throw new Error("angleAxis option not found");
                if (!t) throw new Error("radiusAxis option not found");
            }
            e.coordSysDims = [ "radius", "angle" ], n.set("radius", t), n.set("angle", o), _i(t) && (i.set("radius", t), 
            e.firstCategoryDimIndex = 0), _i(o) && (i.set("angle", o), e.firstCategoryDimIndex = 1);
        },
        geo: function(t, e) {
            e.coordSysDims = [ "lng", "lat" ];
        },
        parallel: function(t, i, o, r) {
            var a = t.ecModel, t = a.getComponent("parallel", t.get("parallelIndex")), s = i.coordSysDims = t.dimensions.slice();
            I(t.parallelAxisIndex, function(t, e) {
                var n = a.getComponent("parallelAxis", t), t = s[e];
                o.set(t, n), _i(n) && null == i.firstCategoryDimIndex && (r.set(t, n), i.firstCategoryDimIndex = e);
            });
        }
    }, rc = "original", ac = "arrayRows", sc = "objectRows", lc = "keyedColumns", hc = "unknown", uc = "typedArray", cc = "column", dc = "row";
    xi.seriesDataToSource = function(t) {
        return new xi({
            data: t,
            sourceFormat: y(t) ? uc : rc,
            fromDataset: !1
        });
    }, Ne(xi);
    var fc = Pe(), pc = "\0_ec_inner", gc = Zn.extend({
        init: function(t, e, n, i) {
            n = n || {}, this.option = null, this._theme = new Zn(n), this._optionManager = i;
        },
        setOption: function(t, e) {
            w(!(pc in t), "please use chart.getOption()"), this._optionManager.setOption(t, e), 
            this.resetOption(null);
        },
        resetOption: function(t) {
            var e, n = !1, i = this._optionManager;
            return t && "recreate" !== t || (e = i.mountOption("recreate" === t), this.option && "recreate" !== t ? (this.restoreData(), 
            this.mergeOption(e)) : function(t) {
                var n, e, i;
                this.option = {}, this.option[pc] = 1, this._componentsMap = L({
                    series: []
                }), this._seriesIndices, this._seriesIndicesMap, n = t, e = this._theme.option, 
                i = n.color && !n.colorLayer, I(e, function(t, e) {
                    "colorLayer" === e && i || Ju.hasClass(e) || ("object" == (void 0 === t ? "undefined" : _typeof(t)) ? n[e] = n[e] ? g(n[e], t, !1) : S(t) : null == n[e] && (n[e] = t));
                }), g(t, ec, !1), this.mergeOption(t);
            }.call(this, e), n = !0), "timeline" !== t && "media" !== t || this.restoreData(), 
            t && "recreate" !== t && "timeline" !== t || (e = i.getTimelineOption(this)) && (this.mergeOption(e), 
            n = !0), t && "recreate" !== t && "media" !== t || (i = i.getMediaOption(this, this._api)).length && I(i, function(t) {
                this.mergeOption(t, n = !0);
            }, this), n;
        },
        mergeOption: function(i) {
            var l = this.option, h = this._componentsMap, n = [];
            fc(this).datasetMap = L(), I(i, function(t, e) {
                null != t && (Ju.hasClass(e) ? e && n.push(e) : l[e] = null == l[e] ? S(t) : g(l[e], t, !0));
            }), Ju.topologicalTravel(n, Ju.getAllClassMainTypes(), function(r, t) {
                var e = Me(i[r]), n = Ce(h.get(r), e), e = n, a = L();
                Vl(e, function(t) {
                    var e = t.exist;
                    e && a.set(e.id, t);
                }), Vl(e, function(t) {
                    var e = t.option;
                    w(!e || null == e.id || !a.get(e.id) || a.get(e.id) === t, "id duplicates: " + (e && e.id)), 
                    e && null != e.id && a.set(e.id, t), t.keyInfo || (t.keyInfo = {});
                }), Vl(e, function(t, e) {
                    var n = t.exist, i = t.option, o = t.keyInfo;
                    if (Wl(i)) {
                        if (o.name = null != i.name ? i.name + "" : n ? n.name : Xl + e, n) o.id = n.id; else if (null != i.id) o.id = i.id + ""; else for (var r = 0; o.id = "\0" + o.name + "\0" + r++, 
                        a.get(o.id); ) ;
                        a.set(o.id, t);
                    }
                }), I(n, function(t) {
                    var e = t.option;
                    D(e) && (t.keyInfo.mainType = r, t.keyInfo.subType = (t = t.exist, e.type || (t ? t.subType : Ju.determineSubType(r, e))));
                });
                var s = function(e, t) {
                    x(t) || (t = t ? [ t ] : []);
                    var n = {};
                    return I(t, function(t) {
                        n[t] = (e.get(t) || []).slice();
                    }), n;
                }(h, t);
                l[r] = [], h.set(r, []), I(n, function(t, e) {
                    var n, i = t.exist, o = t.option;
                    w(D(o) || i, "Empty component definition"), o ? (n = Ju.getClass(r, t.keyInfo.subType, !0), 
                    i && i instanceof n ? (i.name = t.keyInfo.name, i.mergeOption(o, this), i.optionUpdated(o, !1)) : (t = M({
                        dependentModels: s,
                        componentIndex: e
                    }, t.keyInfo), M(i = new n(o, this, this, t), t), i.init(o, this, this, t), i.optionUpdated(null, !0))) : (i.mergeOption({}, this), 
                    i.optionUpdated({}, !1)), h.get(r)[e] = i, l[r][e] = i.option;
                }, this), "series" === r && Ti(this, h.get("series"));
            }, this), this._seriesIndicesMap = L(this._seriesIndices = this._seriesIndices || []);
        },
        getOption: function() {
            var i = S(this.option);
            return I(i, function(t, e) {
                if (Ju.hasClass(e)) {
                    for (var n = (t = Me(t)).length - 1; 0 <= n; n--) ke(t[n]) && t.splice(n, 1);
                    i[e] = t;
                }
            }), delete i[pc], i;
        },
        getTheme: function() {
            return this._theme;
        },
        getComponent: function(t, e) {
            return (t = this._componentsMap.get(t)) ? t[e || 0] : void 0;
        },
        queryComponents: function(t) {
            var e = t.mainType;
            if (!e) return [];
            var n, i, o = t.index, r = t.id, a = t.name, s = this._componentsMap.get(e);
            return s && s.length ? Ii(null != o ? (x(o) || (o = [ o ]), l(b(o, function(t) {
                return s[t];
            }), function(t) {
                return !!t;
            })) : null != r ? (n = x(r), l(s, function(t) {
                return n && 0 <= m(r, t.id) || !n && t.id === r;
            })) : null != a ? (i = x(a), l(s, function(t) {
                return i && 0 <= m(a, t.name) || !i && t.name === a;
            })) : s.slice(), t) : [];
        },
        findComponents: function(t) {
            var e, n, i = t.query, o = t.mainType, r = (e = o + "Index", n = o + "Id", r = o + "Name", 
            !i || null == i[e] && null == i[n] && null == i[r] ? null : {
                mainType: o,
                index: i[e],
                id: i[n],
                name: i[r]
            }), r = Ii(r = r ? this.queryComponents(r) : this._componentsMap.get(o), t);
            return t.filter ? l(r, t.filter) : r;
        },
        eachComponent: function(t, i, o) {
            var e = this._componentsMap;
            "function" == typeof t ? (o = i, i = t, e.each(function(t, n) {
                I(t, function(t, e) {
                    i.call(o, n, t, e);
                });
            })) : C(t) ? I(e.get(t), i, o) : D(t) && I(this.findComponents(t), i, o);
        },
        getSeriesByName: function(e) {
            return l(this._componentsMap.get("series"), function(t) {
                return t.name === e;
            });
        },
        getSeriesByIndex: function(t) {
            return this._componentsMap.get("series")[t];
        },
        getSeriesByType: function(e) {
            return l(this._componentsMap.get("series"), function(t) {
                return t.subType === e;
            });
        },
        getSeries: function() {
            return this._componentsMap.get("series").slice();
        },
        getSeriesCount: function() {
            return this._componentsMap.get("series").length;
        },
        eachSeries: function(n, i) {
            Ci(this), I(this._seriesIndices, function(t) {
                var e = this._componentsMap.get("series")[t];
                n.call(i, e, t);
            }, this);
        },
        eachRawSeries: function(t, e) {
            I(this._componentsMap.get("series"), t, e);
        },
        eachSeriesByType: function(n, i, o) {
            Ci(this), I(this._seriesIndices, function(t) {
                var e = this._componentsMap.get("series")[t];
                e.subType === n && i.call(o, e, t);
            }, this);
        },
        eachRawSeriesByType: function(t, e, n) {
            return I(this.getSeriesByType(t), e, n);
        },
        isSeriesFiltered: function(t) {
            return Ci(this), null == this._seriesIndicesMap.get(t.componentIndex);
        },
        getCurrentSeriesIndices: function() {
            return (this._seriesIndices || []).slice();
        },
        filterSeries: function(t, e) {
            Ci(this), e = l(this._componentsMap.get("series"), t, e), Ti(this, e);
        },
        restoreData: function(e) {
            var n = this._componentsMap;
            Ti(this, n.get("series"));
            var i = [];
            n.each(function(t, e) {
                i.push(e);
            }), Ju.topologicalTravel(i, Ju.getAllClassMainTypes(), function(t) {
                I(n.get(t), function(i) {
                    "series" === t && function(t) {
                        if (t) {
                            var e = t.seiresIndex, n = t.seriesId, t = t.seriesName;
                            return null != e && i.componentIndex !== e || null != n && i.id !== n || null != t && i.name !== t;
                        }
                    }(e) || i.restoreData();
                });
            });
        }
    });
    e(gc, ic);
    var mc = [ "getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel", "getViewOfSeriesModel" ], yc = {};
    ki.prototype = {
        constructor: ki,
        create: function(e, n) {
            var i = [];
            I(yc, function(t) {
                t = t.create(e, n), i = i.concat(t || []);
            }), this._coordinateSystems = i;
        },
        update: function(e, n) {
            I(this._coordinateSystems, function(t) {
                t.update && t.update(e, n);
            });
        },
        getCoordinateSystems: function() {
            return this._coordinateSystems.slice();
        }
    }, ki.register = function(t, e) {
        yc[t] = e;
    }, ki.get = function(t) {
        return yc[t];
    };
    var vc = I, _c = S, xc = b, wc = g, bc = /^(min|max)?(.+)$/;
    function Sc(e, t) {
        Tc(zi(e.series), function(t) {
            Ic(t) && function(t) {
                if (Ic(t)) {
                    Pi(t), Li(t), Ei(t, "label"), Ei(t, "upperLabel"), Ei(t, "edgeLabel"), t.emphasis && (Ei(t.emphasis, "label"), 
                    Ei(t.emphasis, "upperLabel"), Ei(t.emphasis, "edgeLabel"));
                    var e = t.markPoint;
                    e && (Pi(e), Bi(e));
                    var n = t.markLine;
                    n && (Pi(n), Bi(n));
                    var i = t.markArea;
                    i && Bi(i);
                    var o = t.data;
                    if ("graph" === t.type) {
                        o = o || t.nodes;
                        var r = t.links || t.edges;
                        if (r && !y(r)) for (var a = 0; a < r.length; a++) Bi(r[a]);
                        I(t.categories, function(t) {
                            Li(t);
                        });
                    }
                    if (o && !y(o)) for (a = 0; a < o.length; a++) Bi(o[a]);
                    if ((e = t.markPoint) && e.data) for (var s = e.data, a = 0; a < s.length; a++) Bi(s[a]);
                    if ((n = t.markLine) && n.data) for (var l = n.data, a = 0; a < l.length; a++) x(l[a]) ? (Bi(l[a][0]), 
                    Bi(l[a][1])) : Bi(l[a]);
                    "gauge" === t.type ? (Ei(t, "axisLabel"), Ei(t, "title"), Ei(t, "detail")) : "treemap" === t.type ? (Oi(t.breadcrumb, "itemStyle"), 
                    I(t.levels, function(t) {
                        Li(t);
                    })) : "tree" === t.type && Li(t.leaves);
                }
            }(t);
        });
        var n = [ "xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar" ];
        t && n.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"), Tc(n, function(t) {
            Tc(zi(e[t]), function(t) {
                t && (Ei(t, "axisLabel"), Ei(t.axisPointer, "label"));
            });
        }), Tc(zi(e.parallel), function(t) {
            Ei(t = t && t.parallelAxisDefault, "axisLabel"), Ei(t && t.axisPointer, "label");
        }), Tc(zi(e.calendar), function(t) {
            Oi(t, "itemStyle"), Ei(t, "dayLabel"), Ei(t, "monthLabel"), Ei(t, "yearLabel");
        }), Tc(zi(e.radar), function(t) {
            Ei(t, "name");
        }), Tc(zi(e.geo), function(t) {
            Ic(t) && (Bi(t), Tc(zi(t.regions), function(t) {
                Bi(t);
            }));
        }), Tc(zi(e.timeline), function(t) {
            Bi(t), Oi(t, "label"), Oi(t, "itemStyle"), Oi(t, "controlStyle", !0), x(t = t.data) && I(t, function(t) {
                D(t) && (Oi(t, "label"), Oi(t, "itemStyle"));
            });
        }), Tc(zi(e.toolbox), function(t) {
            Oi(t, "iconStyle"), Tc(t.feature, function(t) {
                Oi(t, "iconStyle");
            });
        }), Ei(Ri(e.axisPointer), "label"), Ei(Ri(e.tooltip).axisPointer, "label");
    }
    Ai.prototype = {
        constructor: Ai,
        setOption: function(t, e) {
            t && I(Me(t.series), function(t) {
                t && t.data && y(t.data) && c(t.data);
            }), t = _c(t);
            var o, n = this._optionBackup, t = function(t, n, i) {
                var e, o, r, a = [], s = [], l = t.timeline;
                return t.baseOption && (o = t.baseOption), (l || t.options) && (o = o || {}, a = (t.options || []).slice()), 
                t.media && (o = o || {}, r = t.media, vc(r, function(t) {
                    t && t.option && (t.query ? s.push(t) : e = e || t);
                })), (o = o || t).timeline || (o.timeline = l), vc([ o ].concat(a).concat(b(s, function(t) {
                    return t.option;
                })), function(e) {
                    vc(n, function(t) {
                        t(e, i);
                    });
                }), {
                    baseOption: o,
                    timelineOptions: a,
                    mediaDefault: e,
                    mediaList: s
                };
            }.call(this, t, e, !n);
            this._newBaseOption = t.baseOption, n ? (o = n.baseOption, e = t.baseOption, vc(e = e || {}, function(t, e) {
                var n, i;
                null != t && (n = o[e], Ju.hasClass(e) ? (t = Me(t), i = Ce(n = Me(n), t), o[e] = xc(i, function(t) {
                    return t.option && t.exist ? wc(t.exist, t.option, !0) : t.exist || t.option;
                })) : o[e] = wc(n, t, !0));
            }), t.timelineOptions.length && (n.timelineOptions = t.timelineOptions), t.mediaList.length && (n.mediaList = t.mediaList), 
            t.mediaDefault && (n.mediaDefault = t.mediaDefault)) : this._optionBackup = t;
        },
        mountOption: function(t) {
            var e = this._optionBackup;
            return this._timelineOptions = xc(e.timelineOptions, _c), this._mediaList = xc(e.mediaList, _c), 
            this._mediaDefault = _c(e.mediaDefault), this._currentMediaIndices = [], _c(t ? e.baseOption : this._newBaseOption);
        },
        getTimelineOption: function(t) {
            var e, n = this._timelineOptions;
            return !n.length || (t = t.getComponent("timeline")) && (e = _c(n[t.getCurrentIndex()], !0)), 
            e;
        },
        getMediaOption: function() {
            var t = this._api.getWidth(), e = this._api.getHeight(), n = this._mediaList, i = this._mediaDefault, o = [], r = [];
            if (!n.length && !i) return r;
            for (var a, s = 0, l = n.length; s < l; s++) !function(t, e, n) {
                var i = {
                    width: e,
                    height: n,
                    aspectratio: e / n
                }, o = !0;
                return I(t, function(t, e) {
                    var n = e.match(bc);
                    n && n[1] && n[2] && (e = n[1], n = n[2].toLowerCase(), n = i[n], ("min" === e ? t <= n : "max" === e ? n <= t : n === t) || (o = !1));
                }), o;
            }(n[s].query, t, e) || o.push(s);
            return !o.length && i && (o = [ -1 ]), o.length && (a = this._currentMediaIndices, 
            o.join(",") !== a.join(",")) && (r = xc(o, function(t) {
                return _c((-1 === t ? i : n[t]).option);
            })), this._currentMediaIndices = o, r;
        }
    };
    function Mc(e, t) {
        Sc(e, t), e.series = Me(e.series), I(e.series, function(t) {
            var e, n;
            D(t) && ("pie" !== (e = t.type) && "gauge" !== e || null == t.clockWise || (t.clockwise = t.clockWise), 
            "gauge" === e && null != (n = function(t, e) {
                e = "pointer.color".split(",");
                for (var n = t, i = 0; i < e.length && null != (n = n && n[e[i]]); i++) ;
                return n;
            }(t)) && function(t, e, n) {
                e = "itemStyle.color".split(",");
                for (var i, o = t, r = 0; r < e.length - 1; r++) null == o[i = e[r]] && (o[i] = {}), 
                o = o[i];
                null != o[e[r]] || (o[e[r]] = n);
            }(t, 0, n), Ni(t));
        }), e.dataRange && (e.visualMap = e.dataRange), I(kc, function(t) {
            (t = e[t]) && (x(t) || (t = [ t ]), I(t, function(t) {
                Ni(t);
            }));
        });
    }
    var Tc = I, Ic = D, Cc = [ "areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine" ], Dc = [ [ "x", "left" ], [ "y", "top" ], [ "x2", "right" ], [ "y2", "bottom" ] ], kc = [ "grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline" ];
    (Jl = Hi.prototype).pure = !1;
    var Ac = {
        arrayRows_column: {
            pure: Jl.persistent = !0,
            count: function() {
                return Math.max(0, this._data.length - this._source.startIndex);
            },
            getItem: function(t) {
                return this._data[t + this._source.startIndex];
            },
            appendData: Gi
        },
        arrayRows_row: {
            pure: !0,
            count: function() {
                var t = this._data[0];
                return t ? Math.max(0, t.length - this._source.startIndex) : 0;
            },
            getItem: function(t) {
                t += this._source.startIndex;
                for (var e = [], n = this._data, i = 0; i < n.length; i++) {
                    var o = n[i];
                    e.push(o ? o[t] : null);
                }
                return e;
            },
            appendData: function() {
                throw new Error('Do not support appendData when set seriesLayoutBy: "row".');
            }
        },
        objectRows: {
            pure: !0,
            count: Vi,
            getItem: Wi,
            appendData: Gi
        },
        keyedColumns: {
            pure: !0,
            count: function() {
                var t = this._source.dimensionsDefine[0].name;
                return (t = this._data[t]) ? t.length : 0;
            },
            getItem: function(t) {
                for (var e = [], n = this._source.dimensionsDefine, i = 0; i < n.length; i++) {
                    var o = this._data[n[i].name];
                    e.push(o ? o[t] : null);
                }
                return e;
            },
            appendData: function(t) {
                var o = this._data;
                I(t, function(t, e) {
                    for (var n = o[e] || (o[e] = []), i = 0; i < (t || []).length; i++) n.push(t[i]);
                });
            }
        },
        original: {
            count: Vi,
            getItem: Wi,
            appendData: Gi
        },
        typedArray: {
            persistent: !(Jl.getSource = function() {
                return this._source;
            }),
            pure: !0,
            count: function() {
                return this._data ? this._data.length / this._dimSize : 0;
            },
            getItem: function(t, e) {
                t -= this._offset, e = e || [];
                for (var n = this._dimSize * t, i = 0; i < this._dimSize; i++) e[i] = this._data[n + i];
                return e;
            },
            appendData: function(t) {
                $a && w(y(t), "Added data must be TypedArray if data in initialization is TypedArray"), 
                this._data = t;
            },
            clean: function() {
                this._offset += this.count(), this._data = null;
            }
        }
    }, Pc = {
        arrayRows: Xi,
        objectRows: function(t, e, n, i) {
            return null != n ? t[i] : t;
        },
        keyedColumns: Xi,
        original: function(t, e, n) {
            return t = Ie(t), null != n && t instanceof Array ? t[n] : t;
        },
        typedArray: Xi
    }, Oc = {
        arrayRows: Ui,
        objectRows: function(t, e) {
            return Yi(t[e], this._dimensionInfos[e]);
        },
        keyedColumns: Ui,
        original: function(t, e, n, i) {
            var o = t && (null == t.value ? t : t.value);
            return this._rawData.pure || !Wl(t) || t instanceof Array || (this.hasItemOption = !0), 
            Yi(o instanceof Array ? o[i] : o, this._dimensionInfos[e]);
        },
        typedArray: function(t, e, n, i) {
            return t[i];
        }
    }, Lc = /\{@(.+?)\}/g, gu = {
        getDataParams: function(t, e) {
            var n = this.getData(e), i = this.getRawValue(t, e), o = n.getRawIndex(t), r = n.getName(t), a = n.getRawDataItem(t), s = n.getItemVisual(t, "color"), l = Be((h = this.ecModel.getComponent("tooltip")) && h.get("renderMode")), h = "series" === (t = this.mainType), n = n.userOutput;
            return {
                componentType: t,
                componentSubType: this.subType,
                componentIndex: this.componentIndex,
                seriesType: h ? this.subType : null,
                seriesIndex: this.seriesIndex,
                seriesId: h ? this.id : null,
                seriesName: h ? this.name : null,
                name: r,
                dataIndex: o,
                data: a,
                dataType: e,
                value: i,
                color: s,
                dimensionNames: n ? n.dimensionNames : null,
                encode: n ? n.encode : null,
                marker: ci({
                    color: s,
                    renderMode: l
                }),
                $vars: [ "seriesName", "name", "value" ]
            };
        },
        getFormattedLabel: function(i, t, e, n, o) {
            t = t || "normal";
            var r = this.getData(e), a = r.getItemModel(i), e = this.getDataParams(i, e);
            return null != n && e.value instanceof Array && (e.value = e.value[n]), "function" == typeof (o = a.get("normal" === t ? [ o || "label", "formatter" ] : [ t, o || "label", "formatter" ])) ? (e.status = t, 
            e.dimensionIndex = n, o(e)) : "string" == typeof o ? ui(o, e).replace(Lc, function(t, e) {
                var n = e.length;
                return "[" === e.charAt(0) && "]" === e.charAt(n - 1) && (e = +e.slice(1, n - 1)), 
                qi(r, i, e);
            }) : void 0;
        },
        getRawValue: function(t, e) {
            return qi(this.getData(e), t);
        },
        formatTooltip: function() {}
    };
    (Bu = Zi.prototype).perform = function(t) {
        function e(t) {
            return 1 <= t || (t = 1), t;
        }
        var n = this._upstream, i = t && t.skip;
        this._dirty && n && ((s = this.context).data = s.outputData = n.context.outputData), 
        this.__pipeline && (this.__pipeline.currentTask = this), this._plan && !i && (o = this._plan(this.context));
        var o, r, a = e(this._modBy), s = this._modDataCount || 0, l = e(t && t.modBy), h = t && t.modDataCount || 0;
        if (a === l && s === h || (o = "reset"), !this._dirty && "reset" !== o || (this._dirty = !1, 
        s = i, (o = this)._dueIndex = o._outputDueEnd = o._dueEnd = 0, o._settedOutputEnd = null, 
        !s && o._reset && ((r = o._reset(o.context)) && r.progress && (p = r.forceFirstProgress, 
        r = r.progress), x(r) && !r.length && (r = null)), o._progress = r, o._modBy = o._modDataCount = null, 
        (o = o._downstream) && o.dirty()), this._modBy = l, this._modDataCount = h, t = t && t.step, 
        n ? ($a && w(null != n._outputDueEnd), this._dueEnd = n._outputDueEnd) : ($a && w(!this._progress || this._count), 
        this._dueEnd = this._count ? this._count(this.context) : 1 / 0), this._progress) {
            var u = this._dueIndex, c = Math.min(null != t ? this._dueIndex + t : 1 / 0, this._dueEnd);
            if (!i && (p || u < c)) {
                var d = this._progress;
                if (x(d)) for (var f = 0; f < d.length; f++) Ki(this, d[f], u, c, l, h); else Ki(this, d, u, c, l, h);
            }
            this._dueIndex = c;
            var p = null != this._settedOutputEnd ? this._settedOutputEnd : c;
            $a && w(p >= this._outputDueEnd), this._outputDueEnd = p;
        } else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd : this._dueEnd;
        return this.unfinished();
    };
    var Ec, Bc, zc, Rc, Nc, Fc, Hc = Fc = {
        reset: function(t, e, n, i) {
            Bc = t, Ec = e, zc = n, Rc = i, Nc = Math.ceil(Rc / zc), Fc.next = 1 < zc && 0 < Rc ? Wc : Vc;
        }
    };
    function Vc() {
        return Bc < Ec ? Bc++ : null;
    }
    function Wc() {
        var t = Bc % Nc * zc + Math.ceil(Bc / Nc), t = Ec <= Bc ? null : t < Rc ? t : Bc;
        return Bc++, t;
    }
    Bu.dirty = function() {
        this._dirty = !0, this._onDirty && this._onDirty(this.context);
    }, Bu.unfinished = function() {
        return this._progress && this._dueIndex < this._dueEnd;
    }, Bu.pipe = function(t) {
        $a && w(t && !t._disposed && t !== this), this._downstream === t && !this._dirty || ((this._downstream = t)._upstream = this, 
        t.dirty());
    }, Bu.dispose = function() {
        this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream = null), 
        this._dirty = !1, this._disposed = !0);
    }, Bu.getUpstream = function() {
        return this._upstream;
    }, Bu.getDownstream = function() {
        return this._downstream;
    }, Bu.setOutputEnd = function(t) {
        this._outputDueEnd = this._settedOutputEnd = t;
    };
    var Gc = Pe(), Xc = Ju.extend({
        type: "series.__base__",
        seriesIndex: 0,
        coordinateSystem: null,
        defaultOption: null,
        legendDataProvider: null,
        visualColorAccessPath: "itemStyle.color",
        layoutMode: null,
        init: function(t, e, n) {
            this.seriesIndex = this.componentIndex, this.dataTask = ji({
                count: Qi,
                reset: Ji
            }), this.dataTask.context = {
                model: this
            }, this.mergeDefaultAndTheme(t, n), wi(this), eo(n = this.getInitialData(t, n), this), 
            this.dataTask.context.data = n, $a && w(n, "getInitialData returned invalid data."), 
            Gc(this).dataBeforeProcessed = n, $i(this);
        },
        mergeDefaultAndTheme: function(t, e) {
            var n = this.layoutMode, i = n ? yi(t) : {}, o = this.subType;
            Ju.hasClass(o), g(t, e.getTheme().get(this.subType)), g(t, this.getDefaultOption()), 
            Te(t, "label", [ "show" ]), this.fillDataTextStyle(t.data), n && mi(t, i, n);
        },
        mergeOption: function(t, e) {
            t = g(this.option, t, !0), this.fillDataTextStyle(t.data);
            var n = this.layoutMode;
            n && mi(this.option, t, n), wi(this), eo(e = this.getInitialData(t, e), this), this.dataTask.dirty(), 
            this.dataTask.context.data = e, Gc(this).dataBeforeProcessed = e, $i(this);
        },
        fillDataTextStyle: function(t) {
            if (t && !y(t)) for (var e = [ "show" ], n = 0; n < t.length; n++) t[n] && t[n].label && Te(t[n], "label", e);
        },
        getInitialData: function() {},
        appendData: function(t) {
            this.getRawData().appendData(t.data);
        },
        getData: function(t) {
            var e = io(this);
            return e ? (e = e.context.data, null == t ? e : e.getLinkedData(t)) : Gc(this).data;
        },
        setData: function(t) {
            var e, n = io(this);
            n && ((e = n.context).data !== t && n.modifyOutputEnd && n.setOutputEnd(t.count()), 
            e.outputData = t, n !== this.dataTask && (e.data = t)), Gc(this).data = t;
        },
        getSource: function() {
            return fc(this).source;
        },
        getRawData: function() {
            return Gc(this).dataBeforeProcessed;
        },
        getBaseAxis: function() {
            var t = this.coordinateSystem;
            return t && t.getBaseAxis && t.getBaseAxis();
        },
        formatTooltip: function(e, r, t, a) {
            var s = this, n = "html" === (a = a || "html") ? "<br/>" : "\n", l = "richText" === a, h = {}, u = 0, c = this.getData(), i = c.mapDimension("defaultedTooltip", !0), o = i.length, d = this.getRawValue(e), f = x(d), p = c.getItemVisual(e, "color");
            D(p) && p.colorStops && (p = (p.colorStops[0] || {}).color), p = p || "transparent";
            var g, m, y, d = (1 < o || f && !o ? (m = function(t, e, n) {
                if (t && e) {
                    if (t.reduce && t.reduce === ls) return t.reduce(e, n, void 0);
                    for (var i = 0, o = t.length; i < o; i++) n = e.call(void 0, n, t[i], i, t);
                    return n;
                }
            }(g = d, function(t, e, n) {
                return t | ((n = c.getDimensionInfo(n)) && !1 !== n.tooltip && null != n.displayName);
            }, 0), y = [], i.length ? I(i, function(t) {
                _(qi(c, e, t), t);
            }) : I(g, _), g = m ? l ? "\n" : "<br/>" : "", g += y.join(g || ", "), {
                renderMode: a,
                content: g,
                style: h
            }) : (v = o ? qi(c, e, i[0]) : f ? d[0] : d, {
                renderMode: a,
                content: hi(li(v)),
                style: h
            })).content, v = s.seriesIndex + "at" + u, o = ci({
                color: p,
                type: "item",
                renderMode: a,
                markerId: v
            });
            function _(t, e) {
                var n, i, o = c.getDimensionInfo(e);
                o && !1 !== o.otherDims.tooltip && (n = o.type, i = "sub" + s.seriesIndex + "at" + u, 
                e = "string" == typeof (e = ci({
                    color: p,
                    type: "subItem",
                    renderMode: a,
                    markerId: i
                })) ? e : e.content, (t = (m ? e + hi(o.displayName || "-") + ": " : "") + hi("ordinal" === n ? t + "" : "time" === n ? r ? "" : fi("yyyy/MM/dd hh:mm:ss", t) : li(t))) && y.push(t), 
                l && (h[i] = p, ++u));
            }
            return h[v] = p, ++u, f = c.getName(e), v = this.name, De(this) || (v = ""), v = v ? hi(v) + (r ? ": " : n) : "", 
            o = "string" == typeof o ? o : o.content, {
                html: r ? o + v + d : v + o + (f ? hi(f) + ": " + d : d),
                markers: h
            };
        },
        isAnimationEnabled: function() {
            if (ts.node) return !1;
            var t = this.getShallow("animation");
            return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1), 
            t;
        },
        restoreData: function() {
            this.dataTask.dirty();
        },
        getColorFromPalette: function(t, e, n) {
            var i = this.ecModel;
            return ic.getColorFromPalette.call(this, t, e, n) || i.getColorFromPalette(t, e, n);
        },
        coordDimToDataDim: function(t) {
            return this.getRawData().mapDimension(t, !0);
        },
        getProgressive: function() {
            return this.get("progressive");
        },
        getProgressiveThreshold: function() {
            return this.get("progressiveThreshold");
        },
        getAxisTooltipData: null,
        getTooltipPosition: null,
        pipeTask: null,
        preventIncremental: null,
        pipelineContext: null
    });
    e(Xc, gu), e(Xc, ic);
    var Uc = function() {
        this.group = new Qs(), this.uid = Qn("viewComponent");
    };
    function Yc() {
        var r = Pe();
        return function(t) {
            var e = r(t), n = t.pipelineContext, i = e.large, o = e.progressiveRender, t = e.large = n.large, n = e.progressiveRender = n.progressiveRender;
            return !!(i ^ t || o ^ n) && "reset";
        };
    }
    Uc.prototype = {
        constructor: Uc,
        init: function() {},
        render: function() {},
        dispose: function() {},
        filterForExposedEvent: null
    }, (yu = Uc.prototype).updateView = yu.updateLayout = yu.updateVisual = function() {}, 
    Re(Uc), Ve(Uc, {
        registerWhenExtend: !0
    });
    var qc = Pe(), jc = Yc();
    ($u = oo.prototype = {
        type: "chart",
        init: function() {},
        render: function() {},
        highlight: function(t, e, n, i) {
            ao(t.getData(), i, "emphasis");
        },
        downplay: function(t, e, n, i) {
            ao(t.getData(), i, "normal");
        },
        remove: function() {
            this.group.removeAll();
        },
        dispose: function() {},
        incrementalPrepareRender: null,
        incrementalRender: null,
        updateTransform: null,
        filterForExposedEvent: null
    }).updateView = $u.updateLayout = $u.updateVisual = function(t, e, n, i) {
        this.render(t, e, n, i);
    }, Re(oo, [ "dispose" ]), Ve(oo, {
        registerWhenExtend: !0
    }), oo.markUpdateMethod = function(t, e) {
        qc(t).updateMethod = e;
    };
    var Zc = {
        incrementalPrepareRender: {
            progress: function(t, e) {
                e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload);
            }
        },
        render: {
            forceFirstProgress: !0,
            progress: function(t, e) {
                e.view.render(e.model, e.ecModel, e.api, e.payload);
            }
        }
    }, Kc = "\0__throttleOriginMethod", $c = "\0__throttleRate", Qc = "\0__throttleType", $l = {
        createOnAllSeries: !0,
        performRawSeries: !0,
        reset: function(e, t) {
            var n = e.getData(), i = (e.visualColorAccessPath || "itemStyle.color").split("."), o = e.get(i) || e.getColorFromPalette(e.name, null, t.getSeriesCount());
            if (n.setVisual("color", o), !t.isSeriesFiltered(e)) return "function" != typeof o || o instanceof nu || n.each(function(t) {
                n.setItemVisual(t, "color", o(e.getDataParams(t)));
            }), {
                dataEach: n.hasItemOption ? function(t, e) {
                    var n = t.getItemModel(e).get(i, !0);
                    null != n && t.setItemVisual(e, "color", n);
                } : null
            };
        }
    }, Jc = {
        toolbox: {
            brush: {
                title: {
                    rect: "矩形选择",
                    polygon: "圈选",
                    lineX: "横向选择",
                    lineY: "纵向选择",
                    keep: "保持选择",
                    clear: "清除选择"
                }
            },
            dataView: {
                title: "数据视图",
                lang: [ "数据视图", "关闭", "刷新" ]
            },
            dataZoom: {
                title: {
                    zoom: "区域缩放",
                    back: "区域缩放还原"
                }
            },
            magicType: {
                title: {
                    line: "切换为折线图",
                    bar: "切换为柱状图",
                    stack: "切换为堆叠",
                    tiled: "切换为平铺"
                }
            },
            restore: {
                title: "还原"
            },
            saveAsImage: {
                title: "保存为图片",
                lang: [ "右键另存为图片" ]
            }
        },
        series: {
            typeNames: {
                pie: "饼图",
                bar: "柱状图",
                line: "折线图",
                scatter: "散点图",
                effectScatter: "涟漪散点图",
                radar: "雷达图",
                tree: "树图",
                treemap: "矩形树图",
                boxplot: "箱型图",
                candlestick: "K线图",
                k: "K线图",
                heatmap: "热力图",
                map: "地图",
                parallel: "平行坐标图",
                lines: "线图",
                graph: "关系图",
                sankey: "桑基图",
                funnel: "漏斗图",
                gauge: "仪表盘图",
                pictorialBar: "象形柱图",
                themeRiver: "主题河流图",
                sunburst: "旭日图"
            }
        },
        aria: {
            general: {
                withTitle: "这是一个关于“{title}”的图表。",
                withoutTitle: "这是一个图表，"
            },
            series: {
                single: {
                    prefix: "",
                    withName: "图表类型是{seriesType}，表示{seriesName}。",
                    withoutName: "图表类型是{seriesType}。"
                },
                multiple: {
                    prefix: "它由{seriesCount}个图表系列组成。",
                    withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType}，",
                    withoutName: "第{seriesId}个系列是一个{seriesType}，",
                    separator: {
                        middle: "；",
                        end: "。"
                    }
                }
            },
            data: {
                allData: "其数据是——",
                partialData: "其中，前{displayCnt}项是——",
                withName: "{name}的数据是{value}",
                withoutName: "{value}",
                separator: {
                    middle: "，",
                    end: ""
                }
            }
        }
    }, td = function(t, e) {
        function l(t, e) {
            if ("string" != typeof t) return t;
            var n = t;
            return I(e, function(t, e) {
                n = n.replace(new RegExp("\\{\\s*" + e + "\\s*\\}", "g"), t);
            }), n;
        }
        function h(t) {
            var e = r.get(t);
            if (null != e) return e;
            for (var n = t.split("."), i = Jc.aria, o = 0; o < n.length; ++o) i = i[n[o]];
            return i;
        }
        var u, c, d, n, f, i, r = e.getModel("aria");
        r.get("show") && (r.get("description") ? t.setAttribute("aria-label", r.get("description")) : (u = 0, 
        e.eachSeries(function() {
            ++u;
        }, this), c = r.get("data.maxCount") || 10, n = r.get("series.maxCount") || 10, 
        d = Math.min(u, n), u < 1 || ((i = e.getModel("title").option) && i.length && (i = i[0]), 
        n = (n = i && i.text) ? l(h("general.withTitle"), {
            title: n
        }) : h("general.withoutTitle"), f = [], n += l(h(1 < u ? "series.multiple.prefix" : "series.single.prefix"), {
            seriesCount: u
        }), e.eachSeries(function(t, e) {
            if (e < d) {
                var n = t.get("name"), e = "series." + (1 < u ? "multiple" : "single") + ".";
                n = l(n = h(n ? e + "withName" : e + "withoutName"), {
                    seriesId: t.seriesIndex,
                    seriesName: t.get("name"),
                    seriesType: (e = t.subType, Jc.series.typeNames[e] || "自定义图")
                });
                var i = t.getData();
                n += (window.data = i).count() > c ? l(h("data.partialData"), {
                    displayCnt: c
                }) : h("data.allData");
                for (var o, r, a = [], s = 0; s < i.count(); s++) s < c && (o = i.getName(s), r = qi(i, s), 
                a.push(l(h(o ? "data.withName" : "data.withoutName"), {
                    name: o,
                    value: r
                })));
                n += a.join(h("data.separator.middle")) + h("data.separator.end"), f.push(n);
            }
        }), n += f.join(h("series.multiple.separator.middle")) + h("series.multiple.separator.end"), 
        t.setAttribute("aria-label", n))));
    }, ed = Math.PI;
    (Jl = uo.prototype).restoreData = function(t, e) {
        t.restoreData(e), this._stageTaskMap.each(function(t) {
            (t = t.overallTask) && t.dirty();
        });
    }, Jl.getPerformArgs = function(t, e) {
        if (t.__pipeline) {
            var n = this._pipelineMap.get(t.__pipeline.id), i = n.context;
            return {
                step: n = !e && n.progressiveEnabled && (!i || i.progressiveRender) && t.__idxInPipeline > n.blockIndex ? n.step : null,
                modBy: null != (i = i && i.modDataCount) ? Math.ceil(i / n) : null,
                modDataCount: i
            };
        }
    }, Jl.getPipeline = function(t) {
        return this._pipelineMap.get(t);
    }, Jl.updateStreamModes = function(t, e) {
        var n = this._pipelineMap.get(t.uid), i = t.getData().count(), o = n.progressiveEnabled && e.incrementalPrepareRender && i >= n.threshold, e = t.get("large") && i >= t.get("largeThreshold"), i = "mod" === t.get("progressiveChunkMode") ? i : null;
        t.pipelineContext = n.context = {
            progressiveRender: o,
            modDataCount: i,
            large: e
        };
    }, Jl.restorePipelines = function(t) {
        var i = this, o = i._pipelineMap = L();
        t.eachSeries(function(t) {
            var e = t.getProgressive(), n = t.uid;
            o.set(n, {
                id: n,
                head: null,
                tail: null,
                threshold: t.getProgressiveThreshold(),
                progressiveEnabled: e && !(t.preventIncremental && t.preventIncremental()),
                blockIndex: -1,
                step: Math.round(e || 700),
                count: 0
            }), wo(i, t, t.dataTask);
        });
    }, Jl.prepareStageTasks = function() {
        var n = this._stageTaskMap, i = this.ecInstance.getModel(), o = this.api;
        I(this._allHandlers, function(t) {
            var e = n.get(t.uid) || n.set(t.uid, []);
            t.reset && function(n, i, t, o, r) {
                function e(t) {
                    var e = t.uid;
                    (e = a.get(e) || a.set(e, ji({
                        plan: yo,
                        reset: vo,
                        count: xo
                    }))).context = {
                        model: t,
                        ecModel: o,
                        api: r,
                        useClearVisual: i.isVisual && !i.isLayout,
                        plan: i.plan,
                        reset: i.reset,
                        scheduler: n
                    }, wo(n, t, e);
                }
                var a = t.seriesTaskMap || (t.seriesTaskMap = L()), s = i.seriesType, t = i.getTargetSeries;
                i.createOnAllSeries ? o.eachRawSeries(e) : s ? o.eachRawSeriesByType(s, e) : t && t(o, r).each(e);
                var l = n._pipelineMap;
                a.each(function(t, e) {
                    l.get(e) || (t.dispose(), a.removeKey(e));
                });
            }(this, t, e, i, o), t.overallReset && function(i, t, e, n, o) {
                function r(t) {
                    var e = t.uid, n = s.get(e);
                    n || (n = s.set(e, ji({
                        reset: po,
                        onDirty: mo
                    })), a.dirty()), n.context = {
                        model: t,
                        overallProgress: h,
                        modifyOutputEnd: u
                    }, n.agent = a, n.__block = h, wo(i, t, n);
                }
                var a = e.overallTask = e.overallTask || ji({
                    reset: fo
                });
                a.context = {
                    ecModel: n,
                    api: o,
                    overallReset: t.overallReset,
                    scheduler: i
                };
                var s = a.agentStubMap = a.agentStubMap || L(), l = t.seriesType, e = t.getTargetSeries, h = !0, u = t.modifyOutputEnd;
                l ? n.eachRawSeriesByType(l, r) : e ? e(n, o).each(r) : (h = !1, I(n.getSeries(), r));
                var c = i._pipelineMap;
                s.each(function(t, e) {
                    c.get(e) || (t.dispose(), a.dirty(), s.removeKey(e));
                });
            }(this, t, e, i, o);
        }, this);
    }, Jl.prepareView = function(t, e, n, i) {
        var o = t.renderTask, r = o.context;
        r.model = e, r.ecModel = n, r.api = i, o.__block = !t.incrementalPrepareRender, 
        wo(this, e, o);
    }, Jl.performDataProcessorTasks = function(t, e) {
        co(this, this._dataProcessorHandlers, t, e, {
            block: !0
        });
    }, Jl.performVisualTasks = function(t, e, n) {
        co(this, this._visualHandlers, t, e, n);
    }, Jl.performSeriesTasks = function(t) {
        var e;
        t.eachSeries(function(t) {
            e |= t.dataTask.perform();
        }), this.unfinished |= e;
    }, Jl.plan = function() {
        this._pipelineMap.each(function(t) {
            var e = t.tail;
            do {
                if (e.__block) {
                    t.blockIndex = e.__idxInPipeline;
                    break;
                }
            } while (e = e.getUpstream());
        });
    };
    var nd = Jl.updatePayload = function(t, e) {
        "remain" !== e && (t.context.payload = e);
    }, id = _o(0);
    uo.wrapStageHandler = function(t, e) {
        return f(t) && (t = {
            overallReset: t,
            seriesType: function(t) {
                od = null;
                try {
                    t(rd, ad);
                } catch (t) {}
                return od;
            }(t)
        }), t.uid = Qn("stageHandler"), e && (t.visualType = e), t;
    };
    var od, rd = {}, ad = {};
    bo(rd, gc), bo(ad, Di), rd.eachSeriesByType = rd.eachRawSeriesByType = function(t) {
        od = t;
    }, rd.eachComponent = function(t) {
        "series" === t.mainType && t.subType && (od = t.subType);
    };
    var gu = {
        color: Bu = [ "#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1", "#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF" ],
        colorLayer: [ [ "#37A2DA", "#ffd85c", "#fd7b5f" ], [ "#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5" ], [ "#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF" ], Bu ]
    }, sd = "#eee", yu = function() {
        return {
            axisLine: {
                lineStyle: {
                    color: sd
                }
            },
            axisTick: {
                lineStyle: {
                    color: sd
                }
            },
            axisLabel: {
                textStyle: {
                    color: sd
                }
            },
            splitLine: {
                lineStyle: {
                    type: "dashed",
                    color: "#aaa"
                }
            },
            splitArea: {
                areaStyle: {
                    color: sd
                }
            }
        };
    };
    (Jl = {
        color: $u = [ "#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c", "#f49f42" ],
        backgroundColor: "#333",
        tooltip: {
            axisPointer: {
                lineStyle: {
                    color: sd
                },
                crossStyle: {
                    color: sd
                }
            }
        },
        legend: {
            textStyle: {
                color: sd
            }
        },
        textStyle: {
            color: sd
        },
        title: {
            textStyle: {
                color: sd
            }
        },
        toolbox: {
            iconStyle: {
                normal: {
                    borderColor: sd
                }
            }
        },
        dataZoom: {
            textStyle: {
                color: sd
            }
        },
        visualMap: {
            textStyle: {
                color: sd
            }
        },
        timeline: {
            lineStyle: {
                color: sd
            },
            itemStyle: {
                normal: {
                    color: $u[1]
                }
            },
            label: {
                normal: {
                    textStyle: {
                        color: sd
                    }
                }
            },
            controlStyle: {
                normal: {
                    color: sd,
                    borderColor: sd
                }
            }
        },
        timeAxis: yu(),
        logAxis: yu(),
        valueAxis: yu(),
        categoryAxis: yu(),
        line: {
            symbol: "circle"
        },
        graph: {
            color: $u
        },
        gauge: {
            title: {
                textStyle: {
                    color: sd
                }
            }
        },
        candlestick: {
            itemStyle: {
                normal: {
                    color: "#FD1050",
                    color0: "#0CF49B",
                    borderColor: "#FD1050",
                    borderColor0: "#0CF49B"
                }
            }
        }
    }).categoryAxis.splitLine.show = !1, Ju.extend({
        type: "dataset",
        defaultOption: {
            seriesLayoutBy: cc,
            sourceHeader: null,
            dimensions: null,
            source: null
        },
        optionUpdated: function() {
            !function(t) {
                var e = t.option.source, n = hc;
                if (y(e)) n = uc; else if (x(e)) {
                    0 === e.length && (n = ac);
                    for (var i = 0, o = e.length; i < o; i++) {
                        var r = e[i];
                        if (null != r) {
                            if (x(r)) {
                                n = ac;
                                break;
                            }
                            if (D(r)) {
                                n = sc;
                                break;
                            }
                        }
                    }
                } else if (D(e)) {
                    for (var a in e) if (e.hasOwnProperty(a) && O(e[a])) {
                        n = lc;
                        break;
                    }
                } else if (null != e) throw new Error("Invalid data");
                fc(t).sourceFormat = n;
            }(this);
        }
    }), Uc.extend({
        type: "dataset"
    }), on.extend({
        type: "ellipse",
        shape: {
            cx: 0,
            cy: 0,
            rx: 0,
            ry: 0
        },
        buildPath: function(t, e) {
            var n = e.cx, i = e.cy, o = e.rx, r = e.ry, a = .5522848 * o, e = .5522848 * r;
            t.moveTo(n - o, i), t.bezierCurveTo(n - o, i - e, n - a, i - r, n, i - r), t.bezierCurveTo(n + a, i - r, n + o, i - e, n + o, i), 
            t.bezierCurveTo(n + o, i + e, n + a, i + r, n, i + r), t.bezierCurveTo(n - a, i + r, n - o, i + e, n - o, i), 
            t.closePath();
        }
    });
    var ld = L(), hd = {
        geoJSON: function(t) {
            var e = t.source;
            t.geoJSON = C(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")() : e;
        },
        svg: function(t) {
            t.svgXML = function(t) {
                for (C(t) && (t = new DOMParser().parseFromString(t, "text/xml")), 9 === t.nodeType && (t = t.firstChild); "svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType; ) t = t.nextSibling;
                return t;
            }(t.source);
        }
    }, ud = w, cd = I, dd = f, fd = D, pd = Ju.parseClassType, gd = {
        zrender: "4.1.0"
    }, Bu = {
        PROCESSOR: {
            FILTER: 1e3,
            STATISTIC: 5e3
        },
        VISUAL: {
            LAYOUT: 1e3,
            PROGRESSIVE_LAYOUT: 1100,
            GLOBAL: 2e3,
            CHART: 3e3,
            POST_CHART_LAYOUT: 3500,
            COMPONENT: 4e3,
            BRUSH: 5e3
        }
    }, md = "__flagInMainProcess", yd = "__optionUpdated", vd = /^[a-zA-Z0-9_]+$/;
    Mo.prototype.on = So("on"), Mo.prototype.off = So("off"), Mo.prototype.one = So("one"), 
    e(Mo, gs), (yu = To.prototype)._onframe = function() {
        if (!this._disposed) {
            var t = this._scheduler;
            if (this[yd]) {
                var e = this[yd].silent;
                this[md] = !0, Co(this), _d.update.call(this), this[md] = !1, this[yd] = !1, Po.call(this, e), 
                Oo.call(this, e);
            } else if (t.unfinished) {
                var n = 1, i = this._model;
                this._api, t.unfinished = !1;
                do {
                    var o = +new Date();
                } while (t.performSeriesTasks(i), t.performDataProcessorTasks(i), ko(this, i), t.performVisualTasks(i), 
                zo(this, this._model, 0, "remain"), 0 < (n -= +new Date() - o) && t.unfinished);
                t.unfinished || this._zr.flush();
            }
        }
    }, yu.getDom = function() {
        return this._dom;
    }, yu.getZr = function() {
        return this._zr;
    }, yu.setOption = function(t, e, n) {
        var i, o, r;
        $a && ud(!this[md], "`setOption` should not be called during main process."), fd(e) && (n = e.lazyUpdate, 
        i = e.silent, e = e.notMerge), this[md] = !0, this._model && !e || (o = new Ai(this._api), 
        r = this._theme, (e = this._model = new gc()).scheduler = this._scheduler, e.init(null, null, r, o)), 
        this._model.setOption(t, Md), n ? (this[yd] = {
            silent: i
        }, this[md] = !1) : (Co(this), _d.update.call(this), this._zr.flush(), this[yd] = !1, 
        this[md] = !1, Po.call(this, i), Oo.call(this, i));
    }, yu.setTheme = function() {
        console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0");
    }, yu.getModel = function() {
        return this._model;
    }, yu.getOption = function() {
        return this._model && this._model.getOption();
    }, yu.getWidth = function() {
        return this._zr.getWidth();
    }, yu.getHeight = function() {
        return this._zr.getHeight();
    }, yu.getDevicePixelRatio = function() {
        return this._zr.painter.dpr || window.devicePixelRatio || 1;
    }, yu.getRenderedCanvas = function(t) {
        if (ts.canvasSupported) return (t = t || {}).pixelRatio = t.pixelRatio || 1, t.backgroundColor = t.backgroundColor || this._model.get("backgroundColor"), 
        this._zr.painter.getRenderedCanvas(t);
    }, yu.getSvgDataUrl = function() {
        if (ts.svgSupported) {
            var t = this._zr;
            return I(t.storage.getDisplayList(), function(t) {
                t.stopAnimation(!0);
            }), t.painter.pathToDataUrl();
        }
    }, yu.getDataURL = function(t) {
        var e = (t = t || {}).excludeComponents, n = this._model, i = [], o = this;
        return cd(e, function(t) {
            n.eachComponent({
                mainType: t
            }, function(t) {
                (t = o._componentsMap[t.__viewId]).group.ignore || (i.push(t), t.group.ignore = !0);
            });
        }), t = "svg" === this._zr.painter.getType() ? this.getSvgDataUrl() : this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png")), 
        cd(i, function(t) {
            t.group.ignore = !1;
        }), t;
    }, yu.getConnectedDataURL = function(n) {
        if (ts.canvasSupported) {
            var i = this.group, o = Math.min, r = Math.max;
            if (Ad[i]) {
                var a = 1 / 0, s = 1 / 0, l = -1 / 0, h = -1 / 0, u = [], e = n && n.pixelRatio || 1;
                I(kd, function(t) {
                    var e;
                    t.group === i && (e = t.getRenderedCanvas(S(n)), t = t.getDom().getBoundingClientRect(), 
                    a = o(t.left, a), s = o(t.top, s), l = r(t.right, l), h = r(t.bottom, h), u.push({
                        dom: e,
                        left: t.left,
                        top: t.top
                    }));
                });
                var t = (l *= e) - (a *= e), c = (h *= e) - (s *= e), d = Za();
                d.width = t, d.height = c;
                var f = Se(d);
                return n.connectedBackgroundColor && f.add(new cu({
                    shape: {
                        x: 0,
                        y: 0,
                        width: t,
                        height: c
                    },
                    style: {
                        fill: n.connectedBackgroundColor
                    }
                })), cd(u, function(t) {
                    t = new ye({
                        style: {
                            x: t.left * e - a,
                            y: t.top * e - s,
                            image: t.dom
                        }
                    }), f.add(t);
                }), f.refreshImmediately(), d.toDataURL("image/" + (n && n.type || "png"));
            }
            return this.getDataURL(n);
        }
    }, yu.convertToPixel = s(Io, "convertToPixel"), yu.convertFromPixel = s(Io, "convertFromPixel"), 
    yu.containPixel = function(t, i) {
        var o;
        return I(t = Oe(this._model, t), function(t, n) {
            0 <= n.indexOf("Models") && I(t, function(t) {
                var e = t.coordinateSystem;
                e && e.containPoint ? o |= !!e.containPoint(i) : "seriesModels" === n ? (e = this._chartsMap[t.__viewId]) && e.containPoint ? o |= e.containPoint(i, t) : $a && console.warn(n + ": " + (e ? "The found component do not support containPoint." : "No view mapping to the found component.")) : $a && console.warn(n + ": containPoint is not supported");
            }, this);
        }, this), !!o;
    }, yu.getVisual = function(t, e) {
        var n = (t = Oe(this._model, t, {
            defaultMainType: "series"
        })).seriesModel;
        return $a && (n || console.warn("There is no specified seires model")), n = n.getData(), 
        null != (t = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside : t.hasOwnProperty("dataIndex") ? n.indexOfRawIndex(t.dataIndex) : null) ? n.getItemVisual(t, e) : n.getVisual(e);
    }, yu.getViewOfComponentModel = function(t) {
        return this._componentsMap[t.__viewId];
    }, yu.getViewOfSeriesModel = function(t) {
        return this._chartsMap[t.__viewId];
    };
    var _d = {
        prepareAndUpdate: function(t) {
            Co(this), _d.update.call(this, t);
        },
        update: function(t) {
            var e = this._model, n = this._api, i = this._zr, o = this._coordSysMgr, r = this._scheduler;
            e && (r.restoreData(e, t), r.performSeriesTasks(e), o.create(e, n), r.performDataProcessorTasks(e, t), 
            ko(this, e), o.update(e, n), Eo(e), r.performVisualTasks(e, t), Bo(this, e, n, t), 
            t = e.get("backgroundColor") || "transparent", ts.canvasSupported ? i.setBackgroundColor(t) : (t = yt(i = gt(t), "rgb"), 
            0 === i[3] && (t = "transparent")), Ro(e, n));
        },
        updateTransform: function(i) {
            var o, n, r = this._model, a = this, s = this._api;
            r && (o = [], r.eachComponent(function(t, e) {
                var n = a.getViewOfComponentModel(e);
                n && n.__alive && (!n.updateTransform || (e = n.updateTransform(e, r, s, i)) && e.update) && o.push(n);
            }), n = L(), r.eachSeries(function(t) {
                var e = a._chartsMap[t.__viewId];
                (!e.updateTransform || (e = e.updateTransform(t, r, s, i)) && e.update) && n.set(t.uid, 1);
            }), Eo(r), this._scheduler.performVisualTasks(r, i, {
                setDirty: !0,
                dirtyMap: n
            }), zo(a, r, 0, i, n), Ro(r, this._api));
        },
        updateView: function(t) {
            var e = this._model;
            e && (oo.markUpdateMethod(t, "updateView"), Eo(e), this._scheduler.performVisualTasks(e, t, {
                setDirty: !0
            }), Bo(this, this._model, this._api, t), Ro(e, this._api));
        },
        updateVisual: function(t) {
            _d.update.call(this, t);
        },
        updateLayout: function(t) {
            _d.update.call(this, t);
        }
    };
    yu.resize = function(t) {
        $a && ud(!this[md], "`resize` should not be called during main process."), this._zr.resize(t);
        var e = this._model;
        this._loadingFX && this._loadingFX.resize(), e && (e = e.resetOption("media"), t = t && t.silent, 
        this[md] = !0, e && Co(this), _d.update.call(this), this[md] = !1, Po.call(this, t), 
        Oo.call(this, t));
    }, yu.showLoading = function(t, e) {
        var n;
        fd(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), Dd[t] ? (n = Dd[t](this._api, e), 
        e = this._zr, this._loadingFX = n, e.add(n)) : $a && console.warn("Loading effects " + t + " not exists.");
    }, yu.hideLoading = function() {
        this._loadingFX && this._zr.remove(this._loadingFX), this._loadingFX = null;
    }, yu.makeActionFromEvent = function(t) {
        var e = M({}, t);
        return e.type = bd[t.type], e;
    }, yu.dispatchAction = function(t, e) {
        fd(e) || (e = {
            silent: !!e
        }), wd[t.type] && this._model && (this[md] ? this._pendingActions.push(t) : (Ao.call(this, t, e.silent), 
        e.flush ? this._zr.flush(!0) : !1 !== e.flush && ts.browser.weChat && this._throttledZrFlush(), 
        Po.call(this, e.silent), Oo.call(this, e.silent)));
    }, yu.appendData = function(t) {
        var e = t.seriesIndex, e = this.getModel().getSeriesByIndex(e);
        $a && ud(t.data && e), e.appendData(t), this._scheduler.unfinished = !0;
    }, yu.on = So("on"), yu.off = So("off"), yu.one = So("one");
    var xd = [ "click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu" ];
    yu._initEvents = function() {
        cd(xd, function(s) {
            function t(t) {
                var e, n, i, o = this.getModel(), r = t.target, a = "globalout" === s;
                a ? e = {} : r && null != r.dataIndex ? e = (i = r.dataModel || o.getSeriesByIndex(r.seriesIndex)) && i.getDataParams(r.dataIndex, r.dataType, r) || {} : r && r.eventData && (e = M({}, r.eventData)), 
                e && (n = e.componentType, i = e.componentIndex, "markLine" !== n && "markPoint" !== n && "markArea" !== n || (n = "series", 
                i = e.seriesIndex), i = (n = n && null != i && o.getComponent(n, i)) && this["series" === n.mainType ? "_chartsMap" : "_componentsMap"][n.__viewId], 
                $a && (a || n && i || console.warn("model or view can not be found by params")), 
                e.event = t, e.type = s, this._ecEventProcessor.eventInfo = {
                    targetEl: r,
                    packedEvent: e,
                    model: n,
                    view: i
                }, this.trigger(s, e));
            }
            t.zrEventfulCallAtLast = !0, this._zr.on(s, t, this);
        }, this), cd(bd, function(t, e) {
            this._messageCenter.on(e, function(t) {
                this.trigger(e, t);
            }, this);
        }, this);
    }, yu.isDisposed = function() {
        return this._disposed;
    }, yu.clear = function() {
        this.setOption({
            series: []
        }, !0);
    }, yu.dispose = function() {
        var e, n;
        this._disposed ? $a && console.warn("Instance " + this.id + " has been disposed") : (this._disposed = !0, 
        Ee(this.getDom(), Ld, ""), e = this._api, n = this._model, cd(this._componentsViews, function(t) {
            t.dispose(n, e);
        }), cd(this._chartsViews, function(t) {
            t.dispose(n, e);
        }), this._zr.dispose(), delete kd[this.id]);
    }, e(To, gs), Fo.prototype = {
        constructor: Fo,
        normalizeQuery: function(t) {
            var e, a, s, l = {}, h = {}, u = {};
            return C(t) ? (e = pd(t), l.mainType = e.main || null, l.subType = e.sub || null) : (a = [ "Index", "Name", "Id" ], 
            s = {
                name: 1,
                dataIndex: 1,
                dataType: 1
            }, I(t, function(t, e) {
                for (var n = !1, i = 0; i < a.length; i++) {
                    var o = a[i], r = e.lastIndexOf(o);
                    0 < r && r === e.length - o.length && "data" !== (r = e.slice(0, r)) && (l.mainType = r, 
                    l[o.toLowerCase()] = t, n = !0);
                }
                s.hasOwnProperty(e) && (h[e] = t, n = !0), n || (u[e] = t);
            })), {
                cptQuery: l,
                dataQuery: h,
                otherQuery: u
            };
        },
        filter: function(t, e) {
            function n(t, e, n, i) {
                return null == t[n] || e[i || n] === t[n];
            }
            if (!(l = this.eventInfo)) return !0;
            var i = l.targetEl, o = l.packedEvent, r = l.model, a = l.view;
            if (!r || !a) return !0;
            var s = e.cptQuery, l = e.dataQuery;
            return n(s, r, "mainType") && n(s, r, "subType") && n(s, r, "index", "componentIndex") && n(s, r, "name") && n(s, r, "id") && n(l, o, "name") && n(l, o, "dataIndex") && n(l, o, "dataType") && (!a.filterForExposedEvent || a.filterForExposedEvent(t, e.otherQuery, i, o));
        },
        afterTrigger: function() {
            this.eventInfo = null;
        }
    };
    var wd = {}, bd = {}, Sd = [], Md = [], Td = [], Id = [], Cd = {}, Dd = {}, kd = {}, Ad = {}, Pd = +new Date(), Od = +new Date(), Ld = "_echarts_instance_", $u = Ho;
    function Ed(t, e) {
        t = t || [ "x", "y" ];
        for (var n = {}, i = [], o = {}, r = 0; r < t.length; r++) {
            var a = t[r];
            C(a) && (a = {
                name: a
            });
            var s = a.name;
            a.type = a.type || "float", a.coordDim || (a.coordDim = s, a.coordDimIndex = 0), 
            a.otherDims = a.otherDims || {}, i.push(s), (n[s] = a).index = r, a.createInvertedIndices && (o[s] = []);
        }
        this.dimensions = i, this._dimensionInfos = n, this.hostModel = e, this.dataType, 
        this._indices = null, this._count = 0, this._rawCount = 0, this._storage = {}, this._nameList = [], 
        this._idList = [], this._optionModels = [], this._visual = {}, this._layout = {}, 
        this._itemVisuals = [], this.hasItemVisual = {}, this._itemLayouts = [], this._graphicEls = [], 
        this._chunkSize = 1e5, this._chunkCount = 0, this._rawData, this._rawExtent = {}, 
        this._extent = {}, this._approximateExtent = {}, this._dimensionsSummary = function(r) {
            var t = {}, a = t.encode = {}, s = L(), l = [], h = [], u = t.userOutput = {
                dimensionNames: r.dimensions.slice(),
                encode: {}
            };
            I(r.dimensions, function(t) {
                var e, n, i = r.getDimensionInfo(t), o = i.coordDim;
                o && ($a && w(null == Bd.get(o)), e = i.coordDimIndex, er(a, o)[e] = t, i.isExtraCoord || (s.set(o, 1), 
                "ordinal" === (n = i.type) || "time" === n || (l[0] = t), er(u.encode, o)[e] = i.index), 
                i.defaultTooltip && h.push(t)), Bd.each(function(t, e) {
                    var n = er(a, e);
                    null != (e = i.otherDims[e]) && !1 !== e && (n[e] = i.name);
                });
            });
            var i = [], o = {};
            s.each(function(t, e) {
                var n = a[e];
                o[e] = n[0], i = i.concat(n);
            }), t.dataDimsOnCoord = i, t.encodeFirstDimNotExtra = o;
            var e = a.label;
            return e && e.length && (l = e.slice()), (e = a.tooltip) && e.length ? h = e.slice() : h.length || (h = l.slice()), 
            a.defaultedLabel = l, a.defaultedTooltip = h, t;
        }(this), this._invertedIndicesMap = o, this._calculationInfo = {}, this.userOutput = this._dimensionsSummary.userOutput;
    }
    qo(2e3, $l), Go(Mc), Xo(5e3, function(t) {
        var i = L();
        t.eachSeries(function(t) {
            var e, n = t.get("stack");
            n && (e = i.get(n) || i.set(n, []), (t = {
                stackResultDimension: (n = t.getData()).getCalculationInfo("stackResultDimension"),
                stackedOverDimension: n.getCalculationInfo("stackedOverDimension"),
                stackedDimension: n.getCalculationInfo("stackedDimension"),
                stackedByDimension: n.getCalculationInfo("stackedByDimension"),
                isStackedByIndex: n.getCalculationInfo("isStackedByIndex"),
                data: n,
                seriesModel: t
            }).stackedDimension && (t.isStackedByIndex || t.stackedByDimension) && (e.length && n.setCalculationInfo("stackedOnSeries", e[e.length - 1].seriesModel), 
            e.push(t)));
        }), i.each(Fi);
    }), Zo("default", function(i, t) {
        T(t = t || {}, {
            text: "loading",
            color: "#c23531",
            textColor: "#000",
            maskColor: "rgba(255, 255, 255, 0.8)",
            zlevel: 0
        });
        var o = new cu({
            style: {
                fill: t.maskColor
            },
            zlevel: t.zlevel,
            z: 1e4
        }), r = new mu({
            shape: {
                startAngle: -ed / 2,
                endAngle: -ed / 2 + .1,
                r: 10
            },
            style: {
                stroke: t.color,
                lineCap: "round",
                lineWidth: 5
            },
            zlevel: t.zlevel,
            z: 10001
        }), a = new cu({
            style: {
                fill: "none",
                text: t.text,
                textPosition: "right",
                textDistance: 10,
                textFill: t.textColor
            },
            zlevel: t.zlevel,
            z: 10001
        });
        return r.animateShape(!0).when(1e3, {
            endAngle: 3 * ed / 2
        }).start("circularInOut"), r.animateShape(!0).when(1e3, {
            startAngle: 3 * ed / 2
        }).delay(300).start("circularInOut"), (t = new Qs()).add(r), t.add(a), t.add(o), 
        t.resize = function() {
            var t = i.getWidth() / 2, e = i.getHeight() / 2;
            r.setShape({
                cx: t,
                cy: e
            });
            var n = r.shape.r;
            a.setShape({
                x: t - n,
                y: e - n,
                width: 2 * n,
                height: 2 * n
            }), o.setShape({
                x: 0,
                y: 0,
                width: i.getWidth(),
                height: i.getHeight()
            });
        }, t.resize(), t;
    }), Uo({
        type: "highlight",
        event: "highlight",
        update: "highlight"
    }, E), Uo({
        type: "downplay",
        event: "downplay",
        update: "downplay"
    }, E), Wo("light", gu), Wo("dark", Jl), Jo.prototype = {
        constructor: Jo,
        add: function(t) {
            return this._add = t, this;
        },
        update: function(t) {
            return this._update = t, this;
        },
        remove: function(t) {
            return this._remove = t, this;
        },
        execute: function() {
            var t = this._old, e = this._new, n = {}, i = [], o = [];
            for (tr(t, {}, i, "_oldKeyGetter", this), tr(e, n, o, "_newKeyGetter", this), r = 0; r < t.length; r++) null != (a = n[s = i[r]]) ? ((h = a.length) ? (1 === h && (n[s] = null), 
            a = a.unshift()) : n[s] = null, this._update && this._update(a, r)) : this._remove && this._remove(r);
            for (var r = 0; r < o.length; r++) {
                var a, s = o[r];
                if (n.hasOwnProperty(s) && null != (a = n[s])) if (a.length) for (var l = 0, h = a.length; l < h; l++) this._add && this._add(a[l]); else this._add && this._add(a);
            }
        }
    };
    var Bd = L([ "tooltip", "label", "itemName", "itemId", "seriesName" ]), zd = D, yu = "undefined", Rd = {
        float: ("undefined" == typeof Float64Array ? "undefined" : _typeof(Float64Array)) === yu ? Array : Float64Array,
        int: ("undefined" == typeof Int32Array ? "undefined" : _typeof(Int32Array)) === yu ? Array : Int32Array,
        ordinal: Array,
        number: Array,
        time: Array
    }, Nd = ("undefined" == typeof Uint32Array ? "undefined" : _typeof(Uint32Array)) === yu ? Array : Uint32Array, Fd = ("undefined" == typeof Int32Array ? "undefined" : _typeof(Int32Array)) === yu ? Array : Int32Array, Hd = ("undefined" == typeof Uint16Array ? "undefined" : _typeof(Uint16Array)) === yu ? Array : Uint16Array, Vd = [ "hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount", "_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx" ], Wd = [ "_extent", "_approximateExtent", "_rawExtent" ];
    function Gd(t) {
        t.seriesIndex = this.seriesIndex, t.dataIndex = this.dataIndex, t.dataType = this.dataType;
    }
    ($l = Ed.prototype).type = "list", $l.hasItemOption = !0, $l.getDimension = function(t) {
        return "number" != typeof t && (isNaN(t) || this._dimensionInfos.hasOwnProperty(t)) || (t = this.dimensions[t]), 
        t;
    }, $l.getDimensionInfo = function(t) {
        return this._dimensionInfos[this.getDimension(t)];
    }, $l.getDimensionsOnCoord = function() {
        return this._dimensionsSummary.dataDimsOnCoord.slice();
    }, $l.mapDimension = function(t, e) {
        var n = this._dimensionsSummary;
        return null == e ? n.encodeFirstDimNotExtra[t] : (t = n.encode[t], !0 === e ? (t || []).slice() : t && t[e]);
    }, $l.initData = function(t, e, n) {
        var i = xi.isInstance(t) || O(t);
        if (i && (t = new Hi(t, this.dimensions.length)), $a && !i && ("function" != typeof t.getItem || "function" != typeof t.count)) throw new Error("Inavlid data provider.");
        this._rawData = t, this._storage = {}, this._indices = null, this._nameList = e || [], 
        this._idList = [], this._nameRepeatCount = {}, n || (this.hasItemOption = !1), this.defaultDimValueGetter = Oc[this._rawData.getSource().sourceFormat], 
        this._dimValueGetter = n = n || this.defaultDimValueGetter, this._dimValueGetterArrayRows = Oc.arrayRows, 
        this._rawExtent = {}, this._initDataFromProvider(0, t.count()), t.pure && (this.hasItemOption = !1);
    }, $l.getProvider = function() {
        return this._rawData;
    }, $l.appendData = function(t) {
        $a && w(!this._indices, "appendData can only be called on raw data.");
        var e = this._rawData, n = this.count();
        e.appendData(t), t = e.count(), e.persistent || (t += n), this._initDataFromProvider(n, t);
    }, $l.appendValues = function(t, e) {
        for (var n = this._chunkSize, i = this._storage, o = this.dimensions, r = o.length, a = this._rawExtent, s = this.count(), l = s + Math.max(t.length, e ? e.length : 0), h = this._chunkCount, u = 0; u < r; u++) a[y = o[u]] || (a[y] = fr()), 
        i[y] || (i[y] = []), or(i, this._dimensionInfos[y], n, h, l), this._chunkCount = i[y].length;
        for (var c = new Array(r), d = s; d < l; d++) {
            for (var f = d - s, p = Math.floor(d / n), g = d % n, m = 0; m < r; m++) {
                var y = o[m], v = this._dimValueGetterArrayRows(t[f] || c, y, f, m);
                i[y][p][g] = v;
                var _ = a[y];
                v < _[0] && (_[0] = v), v > _[1] && (_[1] = v);
            }
            e && (this._nameList[d] = e[f]);
        }
        this._rawCount = this._count = l, this._extent = {}, rr(this);
    }, $l._initDataFromProvider = function(t, e) {
        if (!(e <= t)) {
            for (var n, i = this._chunkSize, o = this._rawData, r = this._storage, a = this.dimensions, s = a.length, l = this._dimensionInfos, h = this._nameList, u = this._idList, c = this._rawExtent, d = this._nameRepeatCount = {}, f = this._chunkCount, p = 0; p < s; p++) {
                c[T = a[p]] || (c[T] = fr());
                var g = l[T];
                0 === g.otherDims.itemName && (n = this._nameDimIdx = p), 0 === g.otherDims.itemId && (this._idDimIdx = p), 
                r[T] || (r[T] = []), or(r, g, i, f, e), this._chunkCount = r[T].length;
            }
            for (var m = new Array(s), y = t; y < e; y++) {
                m = o.getItem(y, m);
                for (var v, _, x, w, b = Math.floor(y / i), S = y % i, M = 0; M < s; M++) {
                    var T, I = r[T = a[M]][b], C = this._dimValueGetter(m, T, y, M);
                    (I[S] = C) < (I = c[T])[0] && (I[0] = C), C > I[1] && (I[1] = C);
                }
                o.pure || (v = h[y], m && null == v && (null != m.name ? h[y] = v = m.name : null == n || (x = r[_ = a[n]][b]) && (v = x[S], 
                (w = l[_].ordinalMeta) && w.categories.length && (v = w.categories[v]))), null == (w = null == m ? null : m.id) && null != v && (d[v] = d[v] || 0, 
                0 < d[w = v] && (w += "__ec__" + d[v]), d[v]++), null != w && (u[y] = w));
            }
            !o.persistent && o.clean && o.clean(), this._rawCount = this._count = e, this._extent = {}, 
            rr(this);
        }
    }, $l.count = function() {
        return this._count;
    }, $l.getIndices = function() {
        var t = this._indices;
        if (t) {
            var e = t.constructor, n = this._count;
            if (e === Array) {
                o = new e(n);
                for (var i = 0; i < n; i++) o[i] = t[i];
            } else o = new e(t.buffer, 0, n);
        } else for (var o = new (e = nr(this))(this.count()), i = 0; i < o.length; i++) o[i] = i;
        return o;
    }, $l.get = function(t, e) {
        if (!(0 <= e && e < this._count)) return NaN;
        var n = this._storage;
        if (!n[t]) return NaN;
        e = this.getRawIndex(e);
        var i = Math.floor(e / this._chunkSize), e = e % this._chunkSize;
        return n[t][i][e];
    }, $l.getByRawIndex = function(t, e) {
        if (!(0 <= e && e < this._rawCount)) return NaN;
        var n = this._storage[t];
        return n ? (t = Math.floor(e / this._chunkSize), e %= this._chunkSize, n[t][e]) : NaN;
    }, $l._getFast = function(t, e) {
        var n = Math.floor(e / this._chunkSize), e = e % this._chunkSize;
        return this._storage[t][n][e];
    }, $l.getValues = function(t, e) {
        var n = [];
        x(t) || (e = t, t = this.dimensions);
        for (var i = 0, o = t.length; i < o; i++) n.push(this.get(t[i], e));
        return n;
    }, $l.hasValue = function(t) {
        for (var e = this._dimensionsSummary.dataDimsOnCoord, n = 0, i = e.length; n < i; n++) if (isNaN(this.get(e[n], t))) return !1;
        return !0;
    }, $l.getDataExtent = function(t) {
        t = this.getDimension(t);
        var e = fr();
        if (!this._storage[t]) return e;
        var n, i = this.count();
        if (!this._indices) return this._rawExtent[t].slice();
        if (n = this._extent[t]) return n.slice();
        for (var o = (n = e)[0], r = n[1], a = 0; a < i; a++) {
            var s = this._getFast(t, this.getRawIndex(a));
            s < o && (o = s), r < s && (r = s);
        }
        return n = [ o, r ], this._extent[t] = n;
    }, $l.getApproximateExtent = function(t) {
        return t = this.getDimension(t), this._approximateExtent[t] || this.getDataExtent(t);
    }, $l.setApproximateExtent = function(t, e) {
        e = this.getDimension(e), this._approximateExtent[e] = t.slice();
    }, $l.getCalculationInfo = function(t) {
        return this._calculationInfo[t];
    }, $l.setCalculationInfo = function(t, e) {
        zd(t) ? M(this._calculationInfo, t) : this._calculationInfo[t] = e;
    }, $l.getSum = function(t) {
        var e = 0;
        if (this._storage[t]) for (var n = 0, i = this.count(); n < i; n++) {
            var o = this.get(t, n);
            isNaN(o) || (e += o);
        }
        return e;
    }, $l.getMedian = function(t) {
        var e = [];
        this.each(t, function(t) {
            isNaN(t) || e.push(t);
        });
        var n = [].concat(e).sort(function(t, e) {
            return t - e;
        });
        return 0 === (t = this.count()) ? 0 : t % 2 == 1 ? n[(t - 1) / 2] : (n[t / 2] + n[t / 2 - 1]) / 2;
    }, $l.rawIndexOf = function(t, e) {
        if (t = t && this._invertedIndicesMap[t], $a && !t) throw new Error("Do not supported yet");
        return null == (e = t[e]) || isNaN(e) ? -1 : e;
    }, $l.indexOfName = function(t) {
        for (var e = 0, n = this.count(); e < n; e++) if (this.getName(e) === t) return e;
        return -1;
    }, $l.indexOfRawIndex = function(t) {
        if (!this._indices) return t;
        if (t >= this._rawCount || t < 0) return -1;
        var e = this._indices, n = e[t];
        if (null != n && n < this._count && n === t) return t;
        for (var i = 0, o = this._count - 1; i <= o; ) {
            var r = (i + o) / 2 | 0;
            if (e[r] < t) i = 1 + r; else {
                if (!(e[r] > t)) return r;
                o = r - 1;
            }
        }
        return -1;
    }, $l.indicesOfNearest = function(t, e, n) {
        var i = [];
        if (!this._storage[t]) return i;
        null == n && (n = 1 / 0);
        for (var o = Number.MAX_VALUE, r = -1, a = 0, s = this.count(); a < s; a++) {
            var l = e - this.get(t, a), h = Math.abs(l);
            l <= n && h <= o && ((h < o || 0 <= l && r < 0) && (o = h, r = l, i.length = 0), 
            i.push(a));
        }
        return i;
    }, $l.getRawIndex = sr, $l.getRawDataItem = function(t) {
        if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t));
        for (var e = [], n = 0; n < this.dimensions.length; n++) {
            var i = this.dimensions[n];
            e.push(this.get(i, t));
        }
        return e;
    }, $l.getName = function(t) {
        return t = this.getRawIndex(t), this._nameList[t] || ar(this, this._nameDimIdx, t) || "";
    }, $l.getId = function(t) {
        return hr(this, this.getRawIndex(t));
    }, $l.each = function(t, e, n, i) {
        if (this._count) {
            "function" == typeof t && (i = n, n = e, e = t, t = []), n = n || i || this, t = b(ur(t), this.getDimension, this), 
            $a && cr(this, t);
            for (var o = t.length, r = 0; r < this.count(); r++) switch (o) {
              case 0:
                e.call(n, r);
                break;

              case 1:
                e.call(n, this.get(t[0], r), r);
                break;

              case 2:
                e.call(n, this.get(t[0], r), this.get(t[1], r), r);
                break;

              default:
                for (var a = 0, s = []; a < o; a++) s[a] = this.get(t[a], r);
                s[a] = r, e.apply(n, s);
            }
        }
    }, $l.filterSelf = function(t, e, n, i) {
        if (this._count) {
            "function" == typeof t && (i = n, n = e, e = t, t = []), n = n || i || this, t = b(ur(t), this.getDimension, this), 
            $a && cr(this, t);
            for (var o = this.count(), r = new (nr(this))(o), a = [], s = t.length, l = 0, h = t[0], u = 0; u < o; u++) {
                var c = this.getRawIndex(u);
                if (0 === s) f = e.call(n, u); else if (1 === s) var d = this._getFast(h, c), f = e.call(n, d, u); else {
                    for (var p = 0; p < s; p++) a[p] = this._getFast(h, c);
                    a[p] = u, f = e.apply(n, a);
                }
                f && (r[l++] = c);
            }
            return l < o && (this._indices = r), this._count = l, this._extent = {}, this.getRawIndex = this._indices ? lr : sr, 
            this;
        }
    }, $l.selectRange = function(t) {
        if (this._count) {
            var e, n = [];
            for (e in t) t.hasOwnProperty(e) && n.push(e);
            $a && cr(this, n);
            var i = n.length;
            if (i) {
                var o = this.count(), r = new (nr(this))(o), a = 0, s = n[0], l = t[s][0], h = t[s][1], u = !1;
                if (!this._indices) {
                    var c = 0;
                    if (1 === i) {
                        for (var d = this._storage[n[0]], f = 0; f < this._chunkCount; f++) for (var p = d[f], g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) (l <= (w = p[m]) && w <= h || isNaN(w)) && (r[a++] = c), 
                        c++;
                        u = !0;
                    } else if (2 === i) {
                        for (var d = this._storage[s], y = this._storage[n[1]], v = t[n[1]][0], _ = t[n[1]][1], f = 0; f < this._chunkCount; f++) for (var p = d[f], x = y[f], g = Math.min(this._count - f * this._chunkSize, this._chunkSize), m = 0; m < g; m++) {
                            var w = p[m], b = x[m];
                            (l <= w && w <= h || isNaN(w)) && (v <= b && b <= _ || isNaN(b)) && (r[a++] = c), 
                            c++;
                        }
                        u = !0;
                    }
                }
                if (!u) if (1 === i) for (m = 0; m < o; m++) {
                    var S = this.getRawIndex(m);
                    (l <= (w = this._getFast(s, S)) && w <= h || isNaN(w)) && (r[a++] = S);
                } else for (m = 0; m < o; m++) {
                    for (var M = !0, S = this.getRawIndex(m), f = 0; f < i; f++) {
                        var T = n[f];
                        ((w = this._getFast(e, S)) < t[T][0] || w > t[T][1]) && (M = !1);
                    }
                    M && (r[a++] = this.getRawIndex(m));
                }
                return a < o && (this._indices = r), this._count = a, this._extent = {}, this.getRawIndex = this._indices ? lr : sr, 
                this;
            }
        }
    }, $l.mapArray = function(t, e, n, i) {
        "function" == typeof t && (i = n, n = e, e = t, t = []), n = n || i || this;
        var o = [];
        return this.each(t, function() {
            o.push(e && e.apply(this, arguments));
        }, n), o;
    }, $l.map = function(t, e, n, i) {
        n = n || i || this, t = b(ur(t), this.getDimension, this), $a && cr(this, t), (i = dr(this, t))._indices = this._indices, 
        i.getRawIndex = i._indices ? lr : sr;
        for (var o = i._storage, r = [], a = this._chunkSize, s = t.length, l = this.count(), h = [], u = i._rawExtent, c = 0; c < l; c++) {
            for (var d = 0; d < s; d++) h[d] = this.get(t[d], c);
            h[s] = c;
            var f = e && e.apply(n, h);
            if (null != f) {
                "object" != (void 0 === f ? "undefined" : _typeof(f)) && (r[0] = f, f = r);
                for (var p = this.getRawIndex(c), g = Math.floor(p / a), m = p % a, y = 0; y < f.length; y++) {
                    var v = t[y], _ = f[y], x = u[v];
                    (v = o[v]) && (v[g][m] = _), _ < x[0] && (x[0] = _), _ > x[1] && (x[1] = _);
                }
            }
        }
        return i;
    }, $l.downSample = function(t, e, n, i) {
        for (var o = dr(this, [ t ]), r = o._storage, a = [], s = Math.floor(1 / e), l = r[t], h = this.count(), u = this._chunkSize, c = o._rawExtent[t], d = new (nr(this))(h), f = 0, p = 0; p < h; p += s) {
            h - p < s && (s = h - p, a.length = s);
            for (var g = 0; g < s; g++) {
                var m = this.getRawIndex(p + g), y = Math.floor(m / u), m = m % u;
                a[g] = l[y][m];
            }
            var v = n(a), _ = this.getRawIndex(Math.min(p + i(a, v) || 0, h - 1)), x = _ % u;
            (l[Math.floor(_ / u)][x] = v) < c[0] && (c[0] = v), v > c[1] && (c[1] = v), d[f++] = _;
        }
        return o._count = f, o._indices = d, o.getRawIndex = lr, o;
    }, $l.getItemModel = function(t) {
        var e = this.hostModel;
        return new Zn(this.getRawDataItem(t), e, e && e.ecModel);
    }, $l.diff = function(e) {
        var n = this;
        return new Jo(e ? e.getIndices() : [], this.getIndices(), function(t) {
            return hr(e, t);
        }, function(t) {
            return hr(n, t);
        });
    }, $l.getVisual = function(t) {
        var e = this._visual;
        return e && e[t];
    }, $l.setVisual = function(t, e) {
        if (zd(t)) for (var n in t) t.hasOwnProperty(n) && this.setVisual(n, t[n]); else this._visual = this._visual || {}, 
        this._visual[t] = e;
    }, $l.setLayout = function(t, e) {
        if (zd(t)) for (var n in t) t.hasOwnProperty(n) && this.setLayout(n, t[n]); else this._layout[t] = e;
    }, $l.getLayout = function(t) {
        return this._layout[t];
    }, $l.getItemLayout = function(t) {
        return this._itemLayouts[t];
    }, $l.setItemLayout = function(t, e, n) {
        this._itemLayouts[t] = n ? M(this._itemLayouts[t] || {}, e) : e;
    }, $l.clearItemLayouts = function() {
        this._itemLayouts.length = 0;
    }, $l.getItemVisual = function(t, e, n) {
        return null != (t = (t = this._itemVisuals[t]) && t[e]) || n ? t : this.getVisual(e);
    }, $l.setItemVisual = function(t, e, n) {
        var i = this._itemVisuals[t] || {}, o = this.hasItemVisual;
        if (this._itemVisuals[t] = i, zd(e)) for (var r in e) e.hasOwnProperty(r) && (i[r] = e[r], 
        o[r] = !0); else i[e] = n, o[e] = !0;
    }, $l.clearAllVisual = function() {
        this._visual = {}, this._itemVisuals = [], this.hasItemVisual = {};
    }, $l.setItemGraphicEl = function(t, e) {
        var n = this.hostModel;
        e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = n && n.seriesIndex, 
        "group" === e.type && e.traverse(Gd, e)), this._graphicEls[t] = e;
    }, $l.getItemGraphicEl = function(t) {
        return this._graphicEls[t];
    }, $l.eachItemGraphicEl = function(n, i) {
        I(this._graphicEls, function(t, e) {
            t && n && n.call(i, t, e);
        });
    }, $l.cloneShallow = function(t) {
        var e;
        return t || (t = new Ed(e = b(this.dimensions, this.getDimensionInfo, this), this.hostModel)), 
        t._storage = this._storage, ir(t, this), this._indices ? (e = this._indices.constructor, 
        t._indices = new e(this._indices)) : t._indices = null, t.getRawIndex = t._indices ? lr : sr, 
        t;
    }, $l.wrapMethod = function(t, e) {
        var n = this[t];
        "function" == typeof n && (this.__wrappedMethods = this.__wrappedMethods || [], 
        this.__wrappedMethods.push(t), this[t] = function() {
            var t = n.apply(this, arguments);
            return e.apply(this, [ t ].concat(i(arguments)));
        });
    }, $l.TRANSFERABLE_METHODS = [ "cloneShallow", "downSample", "map" ], $l.CHANGABLE_METHODS = [ "filterSelf", "selectRange" ], 
    Xc.extend({
        type: "series.line",
        dependencies: [ "grid", "polar" ],
        getInitialData: function(t) {
            if ($a && "polar" !== (t = t.coordinateSystem) && "cartesian2d" !== t) throw new Error("Line not support coordinateSystem besides cartesian and polar");
            return mr(this.getSource(), this);
        },
        defaultOption: {
            zlevel: 0,
            z: 2,
            coordinateSystem: "cartesian2d",
            legendHoverLink: !0,
            hoverAnimation: !0,
            clipOverflow: !0,
            label: {
                position: "top"
            },
            lineStyle: {
                width: 2,
                type: "solid"
            },
            step: !1,
            smooth: !1,
            smoothMonotone: null,
            symbol: "emptyCircle",
            symbolSize: 4,
            symbolRotate: null,
            showSymbol: !0,
            showAllSymbol: "auto",
            connectNulls: !1,
            sampling: "none",
            animationEasing: "linear",
            progressive: 0,
            hoverLayerThreshold: 1 / 0
        }
    });
    var gu = pn({
        type: "triangle",
        shape: {
            cx: 0,
            cy: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var n = e.cx, i = e.cy, o = e.width / 2, e = e.height / 2;
            t.moveTo(n, i - e), t.lineTo(n + o, i + e), t.lineTo(n - o, i + e), t.closePath();
        }
    }), Jl = pn({
        type: "diamond",
        shape: {
            cx: 0,
            cy: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var n = e.cx, i = e.cy, o = e.width / 2, e = e.height / 2;
            t.moveTo(n, i - e), t.lineTo(n + o, i), t.lineTo(n, i + e), t.lineTo(n - o, i), 
            t.closePath();
        }
    }), yu = pn({
        type: "pin",
        shape: {
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var n = e.x, i = e.y, o = (u = e.width / 5 * 3) / 2, r = o * o / ((c = Math.max(u, e.height)) - o), a = i - c + o + r, s = Math.asin(r / o), l = Math.cos(s) * o, h = Math.sin(s), e = Math.cos(s), u = .6 * o, c = .7 * o;
            t.moveTo(n - l, a + r), t.arc(n, a, o, Math.PI - s, 2 * Math.PI + s), t.bezierCurveTo(n + l - h * u, a + r + e * u, n, i - c, n, i), 
            t.bezierCurveTo(n, i - c, n - l + h * u, a + r + e * u, n - l, a + r), t.closePath();
        }
    }), $l = pn({
        type: "arrow",
        shape: {
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        buildPath: function(t, e) {
            var n = e.height, i = e.width, o = e.x, e = e.y, i = i / 3 * 2;
            t.moveTo(o, e), t.lineTo(o + i, e + n), t.lineTo(o, e + n / 4 * 3), t.lineTo(o - i, e + n), 
            t.lineTo(o, e), t.closePath();
        }
    }), Xd = {
        line: function(t, e, n, i, o) {
            o.x1 = t, o.y1 = e + i / 2, o.x2 = t + n, o.y2 = e + i / 2;
        },
        rect: function(t, e, n, i, o) {
            o.x = t, o.y = e, o.width = n, o.height = i;
        },
        roundRect: function(t, e, n, i, o) {
            o.x = t, o.y = e, o.width = n, o.height = i, o.r = Math.min(n, i) / 4;
        },
        square: function(t, e, n, i, o) {
            i = Math.min(n, i), o.x = t, o.y = e, o.width = i, o.height = i;
        },
        circle: function(t, e, n, i, o) {
            o.cx = t + n / 2, o.cy = e + i / 2, o.r = Math.min(n, i) / 2;
        },
        diamond: function(t, e, n, i, o) {
            o.cx = t + n / 2, o.cy = e + i / 2, o.width = n, o.height = i;
        },
        pin: function(t, e, n, i, o) {
            o.x = t + n / 2, o.y = e + i / 2, o.width = n, o.height = i;
        },
        arrow: function(t, e, n, i, o) {
            o.x = t + n / 2, o.y = e + i / 2, o.width = n, o.height = i;
        },
        triangle: function(t, e, n, i, o) {
            o.cx = t + n / 2, o.cy = e + i / 2, o.width = n, o.height = i;
        }
    }, Ud = {};
    I({
        line: fu,
        rect: cu,
        roundRect: cu,
        square: cu,
        circle: iu,
        diamond: Jl,
        pin: yu,
        arrow: $l,
        triangle: gu
    }, function(t, e) {
        Ud[e] = new t();
    });
    var Yd = pn({
        type: "symbol",
        shape: {
            symbolType: "",
            x: 0,
            y: 0,
            width: 0,
            height: 0
        },
        calculateTextPosition: function(t, e, n) {
            var i = Yt(t, e, n);
            return (t = this.shape) && "pin" === t.symbolType && "inside" === e.textPosition && (i.y = n.y + .4 * n.height), 
            i;
        },
        buildPath: function(t, e, n) {
            var i, o = e.symbolType;
            "none" !== o && ((i = Ud[o]) || (i = Ud[o = "rect"]), Xd[o](e.x, e.y, e.width, e.height, i.shape), 
            i.buildPath(t, i.shape, n));
        }
    }), gu = _r.prototype, qd = _r.getSymbolSize = function(t, e) {
        return (e = t.getItemVisual(e, "symbolSize")) instanceof Array ? e.slice() : [ +e, +e ];
    };
    gu._createSymbol = function(t, e, n, i, o) {
        this.removeAll(), (o = vr(t, -1, -1, 2, 2, e.getItemVisual(n, "color"), o)).attr({
            z2: 100,
            culling: !0,
            scale: xr(i)
        }), o.drift = wr, this._symbolType = t, this.add(o);
    }, gu.stopSymbolAnimation = function(t) {
        this.childAt(0).stopAnimation(t);
    }, gu.getSymbolPath = function() {
        return this.childAt(0);
    }, gu.getScale = function() {
        return this.childAt(0).scale;
    }, gu.highlight = function() {
        this.childAt(0).trigger("emphasis");
    }, gu.downplay = function() {
        this.childAt(0).trigger("normal");
    }, gu.setZ = function(t, e) {
        var n = this.childAt(0);
        n.zlevel = t, n.z = e;
    }, gu.setDraggable = function(t) {
        var e = this.childAt(0);
        e.draggable = t, e.cursor = t ? "move" : e.cursor;
    }, gu.updateData = function(t, e, n) {
        this.silent = !1;
        var i, o, r = t.getItemVisual(e, "symbol") || "circle", a = t.hostModel, s = qd(t, e), l = r !== this._symbolType;
        l ? (i = t.getItemVisual(e, "symbolKeepAspect"), this._createSymbol(r, t, e, s, i)) : ((o = this.childAt(0)).silent = !1, 
        Gn(o, {
            scale: xr(s)
        }, a, e)), this._updateCommon(t, e, s, n), l && (o = this.childAt(0), l = n && n.fadeIn, 
        n = {
            scale: o.scale.slice()
        }, l && (n.style = {
            opacity: o.style.opacity
        }), o.scale = [ 0, 0 ], l && (o.style.opacity = 0), Xn(o, n, a, e)), this._seriesModel = a;
    };
    var jd = [ "itemStyle" ], Zd = [ "emphasis", "itemStyle" ], Kd = [ "label" ], $d = [ "emphasis", "label" ];
    gu._updateCommon = function(e, t, n, i) {
        var o = this.childAt(0), r = e.hostModel, a = e.getItemVisual(t, "color");
        "image" !== o.type && o.useStyle({
            strokeNoScale: !0
        });
        var s = i && i.itemStyle, l = i && i.hoverItemStyle, h = i && i.symbolRotate, u = i && i.symbolOffset, c = i && i.labelModel, d = i && i.hoverLabelModel, f = i && i.hoverAnimation, p = i && i.cursorStyle;
        !i || e.hasItemOption ? (s = (g = i && i.itemModel ? i.itemModel : e.getItemModel(t)).getModel(jd).getItemStyle([ "color" ]), 
        l = g.getModel(Zd).getItemStyle(), h = g.getShallow("symbolRotate"), u = g.getShallow("symbolOffset"), 
        c = g.getModel(Kd), d = g.getModel($d), f = g.getShallow("hoverAnimation"), p = g.getShallow("cursor")) : l = M({}, l);
        var g = o.style;
        o.attr("rotation", (h || 0) * Math.PI / 180 || 0), u && o.attr("position", [ ti(u[0], n[0]), ti(u[1], n[1]) ]), 
        p && o.attr("cursor", p), o.setColor(a, i && i.symbolInnerColor), o.setStyle(s), 
        null != (p = e.getItemVisual(t, "opacity")) && (g.opacity = p), s = e.getItemVisual(t, "liftZ"), 
        p = o.__z2Origin, null != s ? null == p && (o.__z2Origin = o.z2, o.z2 += s) : null != p && (o.z2 = p, 
        o.__z2Origin = null);
        var m = i && i.useNameLabel;
        En(g, l, c, d, {
            labelFetcher: r,
            labelDataIndex: t,
            defaultText: function(t) {
                return m ? e.getName(t) : function(t, e) {
                    var n = t.mapDimension("defaultedLabel", !0), i = n.length;
                    if (1 === i) return qi(t, e, n[0]);
                    if (i) {
                        for (var o = [], r = 0; r < n.length; r++) {
                            var a = qi(t, e, n[r]);
                            o.push(a);
                        }
                        return o.join(" ");
                    }
                }(e, t);
            },
            isRectText: !0,
            autoColor: a
        }), o.__symbolOriginalScale = xr(n), o.hoverStyle = l, o.highDownOnUpdate = f && r.isAnimationEnabled() ? br : null, 
        An(o);
    }, gu.fadeOut = function(t, e) {
        var n = this.childAt(0);
        this.silent = n.silent = !0, e && e.keepLabel || (n.style.text = null), Gn(n, {
            style: {
                opacity: 0
            },
            scale: [ 0, 0 ]
        }, this._seriesModel, this.dataIndex, t);
    }, r(_r, Qs), (gu = Sr.prototype).updateData = function(i, o) {
        o = Tr(o);
        var r = this.group, a = i.hostModel, s = this._data, l = this._symbolCtor, h = Ir(i);
        s || r.removeAll(), i.diff(s).add(function(t) {
            var e, n = i.getItemLayout(t);
            Mr(i, n, t, o) && ((e = new l(i, t, h)).attr("position", n), i.setItemGraphicEl(t, e), 
            r.add(e));
        }).update(function(t, e) {
            var n = s.getItemGraphicEl(e), e = i.getItemLayout(t);
            return Mr(i, e, t, o) ? (n ? (n.updateData(i, t, h), Gn(n, {
                position: e
            }, a)) : (n = new l(i, t)).attr("position", e), r.add(n), void i.setItemGraphicEl(t, n)) : void r.remove(n);
        }).remove(function(t) {
            var e = s.getItemGraphicEl(t);
            e && e.fadeOut(function() {
                r.remove(e);
            });
        }).execute(), this._data = i;
    }, gu.isPersistent = function() {
        return !0;
    }, gu.updateLayout = function() {
        var n = this._data;
        n && n.eachItemGraphicEl(function(t, e) {
            e = n.getItemLayout(e), t.attr("position", e);
        });
    }, gu.incrementalPrepareUpdate = function(t) {
        this._seriesScope = Ir(t), this._data = null, this.group.removeAll();
    }, gu.incrementalUpdate = function(t, e, n) {
        function i(t) {
            t.isGroup || (t.incremental = t.useHoverLayer = !0);
        }
        n = Tr(n);
        for (var o = t.start; o < t.end; o++) {
            var r, a = e.getItemLayout(o);
            Mr(e, a, o, n) && ((r = new this._symbolCtor(e, o, this._seriesScope)).traverse(i), 
            r.attr("position", a), this.group.add(r), e.setItemGraphicEl(o, r));
        }
    }, gu.remove = function(t) {
        var e = this.group, n = this._data;
        n && t ? n.eachItemGraphicEl(function(t) {
            t.fadeOut(function() {
                e.remove(t);
            });
        }) : e.removeAll();
    };
    var Qd = V, Jd = W, tf = function(t, e, n, i) {
        return t[0] = e[0] + n[0] * i, t[1] = e[1] + n[1] * i, t;
    }, ef = function(t, e) {
        return t[0] = e[0], t[1] = e[1], t;
    }, nf = [], of = [], rf = [], af = on.extend({
        type: "ec-polyline",
        shape: {
            points: [],
            smooth: 0,
            smoothConstraint: !0,
            smoothMonotone: null,
            connectNulls: !1
        },
        style: {
            fill: null,
            stroke: "#000"
        },
        brush: ru(on.prototype.brush),
        buildPath: function(t, e) {
            var n = e.points, i = 0, o = n.length, r = Pr(n, e.smoothConstraint);
            if (e.connectNulls) {
                for (;0 < o && kr(n[o - 1]); o--) ;
                for (;i < o && kr(n[i]); i++) ;
            }
            for (;i < o; ) i += Ar(t, n, i, o, o, 1, r.min, r.max, e.smooth, e.smoothMonotone, e.connectNulls) + 1;
        }
    }), sf = on.extend({
        type: "ec-polygon",
        shape: {
            points: [],
            stackedOnPoints: [],
            smooth: 0,
            stackedOnSmooth: 0,
            smoothConstraint: !0,
            smoothMonotone: null,
            connectNulls: !1
        },
        brush: ru(on.prototype.brush),
        buildPath: function(t, e) {
            var n = e.points, i = e.stackedOnPoints, o = 0, r = n.length, a = e.smoothMonotone, s = Pr(n, e.smoothConstraint), l = Pr(i, e.smoothConstraint);
            if (e.connectNulls) {
                for (;0 < r && kr(n[r - 1]); r--) ;
                for (;o < r && kr(n[o]); o++) ;
            }
            for (;o < r; ) {
                var h = Ar(t, n, o, r, r, 1, s.min, s.max, e.smooth, a, e.connectNulls);
                Ar(t, i, o + h - 1, h, r, -1, l.min, l.max, e.stackedOnSmooth, a, e.connectNulls), 
                o += h + 1, t.closePath();
            }
        }
    });
    function lf(t) {
        return Math.round(t.length / 2);
    }
    oo.extend({
        type: "line",
        init: function() {
            var t = new Qs(), e = new Sr();
            this.group.add(e.group), this._symbolDraw = e, this._lineGroup = t;
        },
        render: function(t, e, n) {
            var i = t.coordinateSystem, o = this.group, r = t.getData(), a = t.getModel("lineStyle"), s = t.getModel("areaStyle"), l = r.mapArray(r.getItemLayout), h = "polar" === i.type, u = this._coordSys, c = this._symbolDraw, d = this._polyline, f = this._polygon, p = this._lineGroup, g = t.get("animation"), m = !s.isEmpty(), y = s.get("origin"), v = function(t, e, n) {
                if (!n.valueDim) return [];
                for (var i = [], o = 0, r = e.count(); o < r; o++) i.push(Dr(n, t, e, o));
                return i;
            }(i, r, Cr(i, r, y)), _ = t.get("showSymbol"), x = _ && !h && function(t, e, n) {
                var i = t.get("showAllSymbol"), t = "auto" === i;
                if ((!i || t) && (n = n.getAxesByScale("ordinal")[0]) && (!t || !function(t, e) {
                    var n = t.getExtent(), i = Math.abs(n[1] - n[0]) / t.scale.count();
                    isNaN(i) && (i = 0);
                    for (var o = e.count(), r = Math.max(1, Math.round(o / 5)), a = 0; a < o; a += r) if (1.5 * _r.getSymbolSize(e, a)[t.isHorizontal() ? 1 : 0] > i) return;
                    return 1;
                }(n, e))) {
                    var o = e.mapDimension(n.dim), r = {};
                    return I(n.getViewLabels(), function(t) {
                        r[t.tickValue] = 1;
                    }), function(t) {
                        return !r.hasOwnProperty(e.get(o, t));
                    };
                }
            }(t, r, i), w = this._data;
            w && w.eachItemGraphicEl(function(t, e) {
                t.__temp && (o.remove(t), w.setItemGraphicEl(e, null));
            }), _ || c.remove(), o.add(p), h = !h && t.get("step"), d && u.type === i.type && h === this._step ? (m && !f ? f = this._newPolygon(l, v, i, g) : f && !m && (p.remove(f), 
            f = this._polygon = null), p.setClipPath(Br(i, !1, !1, t)), _ && c.updateData(r, {
                isIgnore: x,
                clipShape: Br(i, !1, !0, t)
            }), r.eachItemGraphicEl(function(t) {
                t.stopAnimation(!0);
            }), Or(this._stackedOnPoints, v) && Or(this._points, l) || (g ? this._updateAnimation(r, v, i, n, h, y) : (h && (l = zr(l, i, h), 
            v = zr(v, i, h)), d.setShape({
                points: l
            }), f && f.setShape({
                points: l,
                stackedOnPoints: v
            })))) : (_ && c.updateData(r, {
                isIgnore: x,
                clipShape: Br(i, !1, !0, t)
            }), h && (l = zr(l, i, h), v = zr(v, i, h)), d = this._newPolyline(l, i, g), m && (f = this._newPolygon(l, v, i, g)), 
            p.setClipPath(Br(i, !0, !1, t))), g = function(t, e) {
                var n = t.getVisual("visualMeta");
                if (n && n.length && t.count()) if ("cartesian2d" === e.type) {
                    for (var i, o = n.length - 1; 0 <= o; o--) {
                        var r, a = n[o].dimension, a = t.dimensions[a];
                        if ("x" === (r = (a = t.getDimensionInfo(a)) && a.coordDim) || "y" === r) {
                            i = n[o];
                            break;
                        }
                    }
                    if (i) {
                        var s = e.getAxis(r), l = b(i.stops, function(t) {
                            return {
                                coord: s.toGlobalCoord(s.dataToCoord(t.value)),
                                color: t.color
                            };
                        }), h = l.length, u = i.outerColors.slice();
                        h && l[0].coord > l[h - 1].coord && (l.reverse(), u.reverse());
                        var c = l[0].coord - 10, d = (e = l[h - 1].coord + 10) - c;
                        return d < .001 ? "transparent" : (I(l, function(t) {
                            t.offset = (t.coord - c) / d;
                        }), l.push({
                            offset: h ? l[h - 1].offset : .5,
                            color: u[1] || "transparent"
                        }), l.unshift({
                            offset: h ? l[0].offset : .5,
                            color: u[0] || "transparent"
                        }), (l = new vu(0, 0, 0, 0, l, !0))[r] = c, l[r + "2"] = e, l);
                    }
                    $a && console.warn("Visual map on line style only support x or y dimension.");
                } else $a && console.warn("Visual map on line style is only supported on cartesian2d.");
            }(r, i) || r.getVisual("color"), d.useStyle(T(a.getLineStyle(), {
                fill: "none",
                stroke: g,
                lineJoin: "bevel"
            })), p = t.get("smooth"), p = Lr(t.get("smooth")), d.setShape({
                smooth: p,
                smoothMonotone: t.get("smoothMonotone"),
                connectNulls: t.get("connectNulls")
            }), f && (a = r.getCalculationInfo("stackedOnSeries"), d = 0, f.useStyle(T(s.getAreaStyle(), {
                fill: g,
                opacity: .7,
                lineJoin: "bevel"
            })), a && (d = Lr(a.get("smooth"))), f.setShape({
                smooth: p,
                stackedOnSmooth: d,
                smoothMonotone: t.get("smoothMonotone"),
                connectNulls: t.get("connectNulls")
            })), this._data = r, this._coordSys = i, this._stackedOnPoints = v, this._points = l, 
            this._step = h, this._valueOrigin = y;
        },
        dispose: function() {},
        highlight: function(t, e, n, i) {
            var o = t.getData(), r = Ae(o, i);
            if (!(r instanceof Array) && null != r && 0 <= r) {
                var a = o.getItemGraphicEl(r);
                if (!a) {
                    var s = o.getItemLayout(r);
                    if (!s) return;
                    (a = new _r(o, r)).position = s, a.setZ(t.get("zlevel"), t.get("z")), a.ignore = isNaN(s[0]) || isNaN(s[1]), 
                    a.__temp = !0, o.setItemGraphicEl(r, a), a.stopSymbolAnimation(!0), this.group.add(a);
                }
                a.highlight();
            } else oo.prototype.highlight.call(this, t, e, n, i);
        },
        downplay: function(t, e, n, i) {
            var o, r = t.getData(), a = Ae(r, i);
            null != a && 0 <= a ? (o = r.getItemGraphicEl(a)) && (o.__temp ? (r.setItemGraphicEl(a, null), 
            this.group.remove(o)) : o.downplay()) : oo.prototype.downplay.call(this, t, e, n, i);
        },
        _newPolyline: function(t) {
            var e = this._polyline;
            return e && this._lineGroup.remove(e), e = new af({
                shape: {
                    points: t
                },
                silent: !0,
                z2: 10
            }), this._lineGroup.add(e), this._polyline = e;
        },
        _newPolygon: function(t, e) {
            var n = this._polygon;
            return n && this._lineGroup.remove(n), n = new sf({
                shape: {
                    points: t,
                    stackedOnPoints: e
                },
                silent: !0
            }), this._lineGroup.add(n), this._polygon = n;
        },
        _updateAnimation: function(t, e, n, i, o, r) {
            var a = this._polyline, s = this._polygon, l = t.hostModel, h = function(t, e, n, i, o, r, a, s) {
                for (var l, h = (l = [], e.diff(t).add(function(t) {
                    l.push({
                        cmd: "+",
                        idx: t
                    });
                }).update(function(t, e) {
                    l.push({
                        cmd: "=",
                        idx: e,
                        idx1: t
                    });
                }).remove(function(t) {
                    l.push({
                        cmd: "-",
                        idx: t
                    });
                }).execute(), l), u = [], c = [], d = [], f = [], p = [], g = [], m = [], y = Cr(o, e, a), v = Cr(r, t, s), _ = 0; _ < h.length; _++) {
                    var x = h[_], w = !0;
                    switch (x.cmd) {
                      case "=":
                        var b = t.getItemLayout(x.idx), S = e.getItemLayout(x.idx1);
                        (isNaN(b[0]) || isNaN(b[1])) && (b = S.slice()), u.push(b), c.push(S), d.push(n[x.idx]), 
                        f.push(i[x.idx1]), m.push(e.getRawIndex(x.idx1));
                        break;

                      case "+":
                        var M = x.idx;
                        u.push(o.dataToPoint([ e.get(y.dataDimsForPoint[0], M), e.get(y.dataDimsForPoint[1], M) ])), 
                        c.push(e.getItemLayout(M).slice()), d.push(Dr(y, o, e, M)), f.push(i[M]), m.push(e.getRawIndex(M));
                        break;

                      case "-":
                        M = x.idx, (S = t.getRawIndex(M)) !== M ? (u.push(t.getItemLayout(M)), c.push(r.dataToPoint([ t.get(v.dataDimsForPoint[0], M), t.get(v.dataDimsForPoint[1], M) ])), 
                        d.push(n[M]), f.push(Dr(v, r, t, M)), m.push(S)) : w = !1;
                    }
                    w && (p.push(x), g.push(g.length));
                }
                g.sort(function(t, e) {
                    return m[t] - m[e];
                });
                for (var T = [], I = [], C = [], D = [], k = [], _ = 0; _ < g.length; _++) M = g[_], 
                T[_] = u[M], I[_] = c[M], C[_] = d[M], D[_] = f[M], k[_] = p[M];
                return {
                    current: T,
                    next: I,
                    stackedOnCurrent: C,
                    stackedOnNext: D,
                    status: k
                };
            }(this._data, t, this._stackedOnPoints, e, this._coordSys, n, this._valueOrigin, r), u = h.current, c = h.stackedOnCurrent, e = h.next, r = h.stackedOnNext;
            o && (u = zr(h.current, n, o), c = zr(h.stackedOnCurrent, n, o), e = zr(h.next, n, o), 
            r = zr(h.stackedOnNext, n, o)), a.shape.__points = h.current, a.shape.points = u, 
            Gn(a, {
                shape: {
                    points: e
                }
            }, l), s && (s.setShape({
                points: u,
                stackedOnPoints: c
            }), Gn(s, {
                shape: {
                    points: e,
                    stackedOnPoints: r
                }
            }, l));
            for (var d, f = [], p = h.status, g = 0; g < p.length; g++) "=" !== p[g].cmd || (d = t.getItemGraphicEl(p[g].idx1)) && f.push({
                el: d,
                ptIdx: g
            });
            a.animators && a.animators.length && a.animators[0].during(function() {
                for (var t = 0; t < f.length; t++) f[t].el.attr("position", a.shape.__points[f[t].ptIdx]);
            });
        },
        remove: function() {
            var n = this.group, i = this._data;
            this._lineGroup.removeAll(), this._symbolDraw.remove(!0), i && i.eachItemGraphicEl(function(t, e) {
                t.__temp && (n.remove(t), i.setItemGraphicEl(e, null));
            }), this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null;
        }
    });
    var hf = {
        average: function(t) {
            for (var e = 0, n = 0, i = 0; i < t.length; i++) isNaN(t[i]) || (e += t[i], n++);
            return 0 === n ? NaN : e / n;
        },
        sum: function(t) {
            for (var e = 0, n = 0; n < t.length; n++) e += t[n] || 0;
            return e;
        },
        max: function(t) {
            for (var e = -1 / 0, n = 0; n < t.length; n++) t[n] > e && (e = t[n]);
            return isFinite(e) ? e : NaN;
        },
        min: function(t) {
            for (var e = 1 / 0, n = 0; n < t.length; n++) t[n] < e && (e = t[n]);
            return isFinite(e) ? e : NaN;
        },
        nearest: function(t) {
            return t[0];
        }
    };
    Rr.prototype.parse = function(t) {
        return t;
    }, Rr.prototype.getSetting = function(t) {
        return this._setting[t];
    }, Rr.prototype.contain = function(t) {
        var e = this._extent;
        return t >= e[0] && t <= e[1];
    }, Rr.prototype.normalize = function(t) {
        var e = this._extent;
        return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0]);
    }, Rr.prototype.scale = function(t) {
        var e = this._extent;
        return t * (e[1] - e[0]) + e[0];
    }, Rr.prototype.unionExtent = function(t) {
        var e = this._extent;
        t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]);
    }, Rr.prototype.unionExtentFromData = function(t, e) {
        this.unionExtent(t.getApproximateExtent(e));
    }, Rr.prototype.getExtent = function() {
        return this._extent.slice();
    }, Rr.prototype.setExtent = function(t, e) {
        var n = this._extent;
        isNaN(t) || (n[0] = t), isNaN(e) || (n[1] = e);
    }, Rr.prototype.isBlank = function() {
        return this._isBlank;
    }, Rr.prototype.setBlank = function(t) {
        this._isBlank = t;
    }, Rr.prototype.getLabel = null, Re(Rr), Ve(Rr, {
        registerWhenExtend: !0
    }), Nr.createByAxisModel = function(t) {
        var e = t.option;
        return new Nr({
            categories: t = (t = e.data) && b(t, Hr),
            needCollect: !t,
            deduplication: !1 !== e.dedplication
        });
    }, (gu = Nr.prototype).getOrdinal = function(t) {
        return Fr(this).get(t);
    }, gu.parseAndCollect = function(t) {
        var e = this._needCollect;
        if ("string" != typeof t && !e) return t;
        if (e && !this._deduplication) return n = this.categories.length, this.categories[n] = t, 
        n;
        var n, i = Fr(this);
        return null == (n = i.get(t)) && (e ? (n = this.categories.length, this.categories[n] = t, 
        i.set(t, n)) : n = NaN), n;
    };
    var uf = Rr.prototype, cf = Rr.extend({
        type: "ordinal",
        init: function(t, e) {
            t && !x(t) || (t = new Nr({
                categories: t
            })), this._ordinalMeta = t, this._extent = e || [ 0, t.categories.length - 1 ];
        },
        parse: function(t) {
            return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t);
        },
        contain: function(t) {
            return t = this.parse(t), uf.contain.call(this, t) && null != this._ordinalMeta.categories[t];
        },
        normalize: function(t) {
            return uf.normalize.call(this, this.parse(t));
        },
        scale: function(t) {
            return Math.round(uf.scale.call(this, t));
        },
        getTicks: function() {
            for (var t = [], e = this._extent, n = e[0]; n <= e[1]; ) t.push(n), n++;
            return t;
        },
        getLabel: function(t) {
            return this.isBlank() ? void 0 : this._ordinalMeta.categories[t];
        },
        count: function() {
            return this._extent[1] - this._extent[0] + 1;
        },
        unionExtentFromData: function(t, e) {
            this.unionExtent(t.getApproximateExtent(e));
        },
        getOrdinalMeta: function() {
            return this._ordinalMeta;
        },
        niceTicks: E,
        niceExtent: E
    });
    cf.create = function() {
        return new cf();
    };
    var df = ei, ff = ei, pf = Rr.extend({
        type: "interval",
        _interval: 0,
        _intervalPrecision: 2,
        setExtent: function(t, e) {
            var n = this._extent;
            isNaN(t) || (n[0] = parseFloat(t)), isNaN(e) || (n[1] = parseFloat(e));
        },
        unionExtent: function(t) {
            var e = this._extent;
            t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]), pf.prototype.setExtent.call(this, e[0], e[1]);
        },
        getInterval: function() {
            return this._interval;
        },
        setInterval: function(t) {
            this._interval = t, this._niceExtent = this._extent.slice(), this._intervalPrecision = Vr(t);
        },
        getTicks: function() {
            return function(t, e, n, i) {
                var o = [];
                if (!t) return o;
                e[0] < n[0] && o.push(e[0]);
                for (var r = n[0]; r <= n[1] && (o.push(r), (r = df(r + t, i)) !== o[o.length - 1]); ) if (1e4 < o.length) return [];
                return e[1] > (o.length ? o[o.length - 1] : n[1]) && o.push(e[1]), o;
            }(this._interval, this._extent, this._niceExtent, this._intervalPrecision);
        },
        getLabel: function(t, e) {
            return null == t ? "" : (null == (e = e && e.precision) ? e = ni(t) || 0 : "auto" === e && (e = this._intervalPrecision), 
            li(t = ff(t, e, !0)));
        },
        niceTicks: function(t, e, n) {
            t = t || 5;
            var i, o = this._extent, r = o[1] - o[0];
            isFinite(r) && (r < 0 && (r = -r, o.reverse()), i = t, r = e, t = n, e = {}, o = (n = o)[1] - n[0], 
            i = e.interval = si(o / i, !0), null != r && i < r && (i = e.interval = r), null != t && t < i && (i = e.interval = t), 
            t = e.intervalPrecision = Vr(i), Gr(e.niceTickExtent = [ df(Math.ceil(n[0] / i) * i, t), df(Math.floor(n[1] / i) * i, t) ], n), 
            this._intervalPrecision = e.intervalPrecision, this._interval = e.interval, this._niceExtent = e.niceTickExtent);
        },
        niceExtent: function(t) {
            var e = this._extent;
            e[0] === e[1] && (0 !== e[0] ? (n = e[0], t.fixMax || (e[1] += n / 2), e[0] -= n / 2) : e[1] = 1);
            var n = e[1] - e[0];
            isFinite(n) || (e[0] = 0, e[1] = 1), this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval), 
            n = this._interval, t.fixMin || (e[0] = ff(Math.floor(e[0] / n) * n)), t.fixMax || (e[1] = ff(Math.ceil(e[1] / n) * n));
        }
    });
    pf.create = function() {
        return new pf();
    };
    var gf = "__ec_stack_", mf = ("undefined" != typeof Float32Array || Array, Yc(), 
    pf.prototype), yf = Math.ceil, vf = Math.floor, ru = 36e5, _f = 864e5, xf = pf.extend({
        type: "time",
        getLabel: function(t) {
            var e = this._stepLvl, t = new Date(t);
            return fi(e[0], t, this.getSetting("useUTC"));
        },
        niceExtent: function(t) {
            var e = this._extent;
            e[0] === e[1] && (e[0] -= _f, e[1] += _f), e[1] === -1 / 0 && 1 / 0 === e[0] && (n = new Date(), 
            e[1] = +new Date(n.getFullYear(), n.getMonth(), n.getDate()), e[0] = e[1] - _f), 
            this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval);
            var n = this._interval;
            t.fixMin || (e[0] = ei(vf(e[0] / n) * n)), t.fixMax || (e[1] = ei(yf(e[1] / n) * n));
        },
        niceTicks: function(t, e, n) {
            t = t || 10;
            var i = this._extent, o = i[1] - i[0], r = o / t;
            null != e && r < e && (r = e), null != n && n < r && (r = n), n = wf.length, r = function(t, e, n, i) {
                for (;n < i; ) {
                    var o = n + i >>> 1;
                    t[o][1] < e ? n = 1 + o : i = o;
                }
                return n;
            }(wf, r, 0, n), n = (r = wf[Math.min(r, n - 1)])[1], "year" === r[0] && (n *= si(o / n / t, !0)), 
            t = this.getSetting("useUTC") ? 0 : 60 * new Date(+i[0] || +i[1]).getTimezoneOffset() * 1e3, 
            Gr(t = [ Math.round(yf((i[0] - t) / n) * n + t), Math.round(vf((i[1] - t) / n) * n + t) ], i), 
            this._stepLvl = r, this._interval = n, this._niceExtent = t;
        },
        parse: function(t) {
            return +ri(t);
        }
    });
    I([ "contain", "normalize" ], function(e) {
        xf.prototype[e] = function(t) {
            return mf[e].call(this, this.parse(t));
        };
    });
    var wf = [ [ "hh:mm:ss", 1e3 ], [ "hh:mm:ss", 5e3 ], [ "hh:mm:ss", 1e4 ], [ "hh:mm:ss", 15e3 ], [ "hh:mm:ss", 3e4 ], [ "hh:mm\nMM-dd", 6e4 ], [ "hh:mm\nMM-dd", 3e5 ], [ "hh:mm\nMM-dd", 6e5 ], [ "hh:mm\nMM-dd", 9e5 ], [ "hh:mm\nMM-dd", 18e5 ], [ "hh:mm\nMM-dd", ru ], [ "hh:mm\nMM-dd", 72e5 ], [ "hh:mm\nMM-dd", 6 * ru ], [ "hh:mm\nMM-dd", 432e5 ], [ "MM-dd\nyyyy", _f ], [ "MM-dd\nyyyy", 2 * _f ], [ "MM-dd\nyyyy", 3 * _f ], [ "MM-dd\nyyyy", 4 * _f ], [ "MM-dd\nyyyy", 5 * _f ], [ "MM-dd\nyyyy", 6 * _f ], [ "week", 7 * _f ], [ "MM-dd\nyyyy", 864e6 ], [ "week", 14 * _f ], [ "week", 21 * _f ], [ "month", 31 * _f ], [ "week", 42 * _f ], [ "month", 62 * _f ], [ "week", 70 * _f ], [ "quarter", 95 * _f ], [ "month", 31 * _f * 4 ], [ "month", 13392e6 ], [ "half-year", 16416e6 ], [ "month", 31 * _f * 8 ], [ "month", 26784e6 ], [ "year", 380 * _f ] ];
    xf.create = function(t) {
        return new xf({
            useUTC: t.ecModel.get("useUTC")
        });
    };
    var bf = Rr.prototype, Sf = pf.prototype, Mf = ni, Tf = ei, If = Math.floor, Cf = Math.ceil, Df = Math.pow, kf = Math.log, Af = Rr.extend({
        type: "log",
        base: 10,
        $constructor: function() {
            Rr.apply(this, arguments), this._originalScale = new pf();
        },
        getTicks: function() {
            var n = this._originalScale, i = this._extent, o = n.getExtent();
            return b(Sf.getTicks.call(this), function(t) {
                var e = ei(Df(this.base, t)), e = t === i[0] && n.__fixMin ? Yr(e, o[0]) : e;
                return t === i[1] && n.__fixMax ? Yr(e, o[1]) : e;
            }, this);
        },
        getLabel: Sf.getLabel,
        scale: function(t) {
            return t = bf.scale.call(this, t), Df(this.base, t);
        },
        setExtent: function(t, e) {
            var n = this.base;
            t = kf(t) / kf(n), e = kf(e) / kf(n), Sf.setExtent.call(this, t, e);
        },
        getExtent: function() {
            var t = this.base, e = bf.getExtent.call(this);
            e[0] = Df(t, e[0]), e[1] = Df(t, e[1]);
            var n = this._originalScale, t = n.getExtent();
            return n.__fixMin && (e[0] = Yr(e[0], t[0])), n.__fixMax && (e[1] = Yr(e[1], t[1])), 
            e;
        },
        unionExtent: function(t) {
            this._originalScale.unionExtent(t);
            var e = this.base;
            t[0] = kf(t[0]) / kf(e), t[1] = kf(t[1]) / kf(e), bf.unionExtent.call(this, t);
        },
        unionExtentFromData: function(t, e) {
            this.unionExtent(t.getApproximateExtent(e));
        },
        niceTicks: function(t) {
            t = t || 10;
            var e = this._extent, n = e[1] - e[0];
            if (!(1 / 0 == n || n <= 0)) {
                var i = Math.pow(10, ai(n));
                for (t / n * i <= .5 && (i *= 10); !isNaN(i) && Math.abs(i) < 1 && 0 < Math.abs(i); ) i *= 10;
                e = [ ei(Cf(e[0] / i) * i), ei(If(e[1] / i) * i) ], this._interval = i, this._niceExtent = e;
            }
        },
        niceExtent: function(t) {
            Sf.niceExtent.call(this, t);
            var e = this._originalScale;
            e.__fixMin = t.fixMin, e.__fixMax = t.fixMax;
        }
    });
    function Pf(t) {
        this._axes = {}, this._dimList = [], this.name = t || "";
    }
    function Of(t, e, n) {
        this.dim = t, this.scale = e, this._extent = n || [ 0, 0 ], this.inverse = !1, this.onBand = !1;
    }
    I([ "contain", "normalize" ], function(e) {
        Af.prototype[e] = function(t) {
            return t = kf(t) / kf(this.base), bf[e].call(this, t);
        };
    }), Af.create = function() {
        return new Af();
    }, Pf.prototype = {
        constructor: Pf,
        type: "cartesian",
        getAxis: function(t) {
            return this._axes[t];
        },
        getAxes: function() {
            return b(this._dimList, Jr, this);
        },
        getAxesByScale: function(e) {
            return e = e.toLowerCase(), l(this.getAxes(), function(t) {
                return t.scale.type === e;
            });
        },
        addAxis: function(t) {
            var e = t.dim;
            this._axes[e] = t, this._dimList.push(e);
        },
        dataToCoord: function(t) {
            return this._dataCoordConvert(t, "dataToCoord");
        },
        coordToData: function(t) {
            return this._dataCoordConvert(t, "coordToData");
        },
        _dataCoordConvert: function(t, e) {
            for (var n = this._dimList, i = t instanceof Array ? [] : {}, o = 0; o < n.length; o++) {
                var r = n[o], a = this._axes[r];
                i[r] = a[e](t[r]);
            }
            return i;
        }
    }, ta.prototype = {
        constructor: ta,
        type: "cartesian2d",
        dimensions: [ "x", "y" ],
        getBaseAxis: function() {
            return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x");
        },
        containPoint: function(t) {
            var e = this.getAxis("x"), n = this.getAxis("y");
            return e.contain(e.toLocalCoord(t[0])) && n.contain(n.toLocalCoord(t[1]));
        },
        containData: function(t) {
            return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1]);
        },
        dataToPoint: function(t, e, n) {
            var i = this.getAxis("x"), o = this.getAxis("y");
            return (n = n || [])[0] = i.toGlobalCoord(i.dataToCoord(t[0])), n[1] = o.toGlobalCoord(o.dataToCoord(t[1])), 
            n;
        },
        clampData: function(t, e) {
            var n = this.getAxis("x").scale, i = this.getAxis("y").scale, o = n.getExtent(), r = i.getExtent(), n = n.parse(t[0]), t = i.parse(t[1]);
            return (e = e || [])[0] = Math.min(Math.max(Math.min(o[0], o[1]), n), Math.max(o[0], o[1])), 
            e[1] = Math.min(Math.max(Math.min(r[0], r[1]), t), Math.max(r[0], r[1])), e;
        },
        pointToData: function(t, e) {
            var n = this.getAxis("x"), i = this.getAxis("y");
            return (e = e || [])[0] = n.coordToData(n.toLocalCoord(t[0])), e[1] = i.coordToData(i.toLocalCoord(t[1])), 
            e;
        },
        getOtherAxis: function(t) {
            return this.getAxis("x" === t.dim ? "y" : "x");
        }
    }, r(ta, Pf);
    var Lf = Pe(), Ef = [ 0, 1 ];
    function Bf(t, e, n, i, o) {
        Of.call(this, t, e, n), this.type = i || "value", this.position = o || "bottom";
    }
    Of.prototype = {
        constructor: Of,
        contain: function(t) {
            var e = this._extent, n = Math.min(e[0], e[1]), e = Math.max(e[0], e[1]);
            return n <= t && t <= e;
        },
        containData: function(t) {
            return this.contain(this.dataToCoord(t));
        },
        getExtent: function() {
            return this._extent.slice();
        },
        getPixelPrecision: function(t) {
            return e = t || this.scale.getExtent(), n = this._extent, i = Math.log, t = Math.LN10, 
            e = Math.floor(i(e[1] - e[0]) / t), t = Math.round(i(Math.abs(n[1] - n[0])) / t), 
            t = Math.min(Math.max(-e + t, 0), 20), isFinite(t) ? t : 20;
            var e, n, i;
        },
        setExtent: function(t, e) {
            var n = this._extent;
            n[0] = t, n[1] = e;
        },
        dataToCoord: function(t, e) {
            var n = this._extent, i = this.scale;
            return t = i.normalize(t), this.onBand && "ordinal" === i.type && sa(n = n.slice(), i.count()), 
            Jn(t, Ef, n, e);
        },
        coordToData: function(t, e) {
            var n = this._extent, i = this.scale;
            return this.onBand && "ordinal" === i.type && sa(n = n.slice(), i.count()), e = Jn(t, n, Ef, e), 
            this.scale.scale(e);
        },
        pointToData: function() {},
        getTicksCoords: function(t) {
            var e, n, i, o, r, a, s, l, h = (t = t || {}).tickModel || this.getTickModel(), r = (o = h, 
            "category" === (u = this).type ? (a = o, l = na(r = u, "ticks"), o = $r(a), ia(l, o) || (a.get("show") && !r.scale.isBlank() || 0, 
            oa(l, o, {
                ticks: f(o) ? aa(r, o, !0) : "auto" === o ? (s = (a = ea(r, r.getLabelModel())).labelCategoryInterval, 
                b(a.labels, function(t) {
                    return t.tickValue;
                })) : ra(r, s = o, !0),
                tickCategoryInterval: s
            }))) : {
                ticks: u.scale.getTicks()
            }), o = b(r.ticks, function(t) {
                return {
                    coord: this.dataToCoord(t),
                    tickValue: t
                };
            }, this), s = h.get("alignWithLabel"), u = this, h = o;
            return r.tickCategoryInterval, r = s, s = t.clamp, t = h.length, this.onBand && !r && t && (u = this.getExtent(), 
            1 === t ? (h[0].coord = u[0], e = h[1] = {
                coord: u[0]
            }) : (n = h[1].coord - h[0].coord, I(h, function(t) {
                t.coord -= n / 2;
            }), e = {
                coord: h[t - 1].coord + n
            }, h.push(e)), i = u[0] > u[1], c(h[0].coord, u[0]) && (s ? h[0].coord = u[0] : h.shift()), 
            s && c(u[0], h[0].coord) && h.unshift({
                coord: u[0]
            }), c(u[1], e.coord) && (s ? e.coord = u[1] : h.pop()), s && c(e.coord, u[1]) && h.push({
                coord: u[1]
            })), o;
            function c(t, e) {
                return i ? e < t : t < e;
            }
        },
        getViewLabels: function() {
            return ("category" === (t = this).type ? (o = (e = t).getLabelModel(), r = ea(e, o), 
            !o.get("show") || e.scale.isBlank() ? {
                labels: [],
                labelCategoryInterval: r.labelCategoryInterval
            } : r) : (t = (n = t).scale.getTicks(), i = Zr(n), {
                labels: b(t, function(t, e) {
                    return {
                        formattedLabel: i(t, e),
                        rawLabel: n.scale.getLabel(t),
                        tickValue: t
                    };
                })
            })).labels;
            var t, n, i, e, o, r;
        },
        getLabelModel: function() {
            return this.model.getModel("axisLabel");
        },
        getTickModel: function() {
            return this.model.getModel("axisTick");
        },
        getBandWidth: function() {
            var t = this._extent, e = this.scale.getExtent();
            return 0 === (e = e[1] - e[0] + (this.onBand ? 1 : 0)) && (e = 1), t = Math.abs(t[1] - t[0]), 
            Math.abs(t) / e;
        },
        isHorizontal: null,
        getRotate: null,
        calculateCategoryInterval: function() {
            return function(t) {
                var e = (l = (r = t).getLabelModel(), {
                    axisRotate: r.getRotate ? r.getRotate() : r.isHorizontal && !r.isHorizontal() ? 90 : 0,
                    labelRotate: l.get("rotate") || 0,
                    font: l.getFont()
                }), n = Zr(t), i = (e.axisRotate - e.labelRotate) / 180 * Math.PI, o = (h = t.scale).getExtent(), r = h.count();
                if (o[1] - o[0] < 1) return 0;
                var a = 1;
                40 < r && (a = Math.max(1, Math.floor(r / 40)));
                for (var s = o[0], l = t.dataToCoord(s + 1) - t.dataToCoord(s), h = Math.abs(l * Math.cos(i)), l = Math.abs(l * Math.sin(i)), u = 0, c = 0; s <= o[1]; s += a) var d = 1.3 * (f = Gt(n(s), e.font, "center", "top")).width, f = 1.3 * f.height, u = Math.max(u, d, 7), c = Math.max(c, f, 7);
                return i = u / h, h = c / l, isNaN(i) && (i = 1 / 0), isNaN(h) && (h = 1 / 0), l = Math.max(0, Math.floor(Math.min(i, h))), 
                h = (i = Lf(t.model)).lastAutoInterval, t = i.lastTickCount, null != h && null != t && Math.abs(h - l) <= 1 && Math.abs(t - r) <= 1 && l < h ? l = h : (i.lastTickCount = r, 
                i.lastAutoInterval = l), l;
            }(this);
        }
    }, Bf.prototype = {
        constructor: Bf,
        index: 0,
        getAxesOnZeroOf: null,
        model: null,
        isHorizontal: function() {
            var t = this.position;
            return "top" === t || "bottom" === t;
        },
        getGlobalExtent: function(t) {
            var e = this.getExtent();
            return e[0] = this.toGlobalCoord(e[0]), e[1] = this.toGlobalCoord(e[1]), t && e[0] > e[1] && e.reverse(), 
            e;
        },
        getOtherAxis: function() {
            this.grid.getOtherAxis();
        },
        pointToData: function(t, e) {
            return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e);
        },
        toLocalCoord: null,
        toGlobalCoord: null
    }, r(Bf, Of);
    var gu = {
        show: !0,
        zlevel: 0,
        z: 0,
        inverse: !1,
        name: "",
        nameLocation: "end",
        nameRotate: null,
        nameTruncate: {
            maxWidth: null,
            ellipsis: "...",
            placeholder: "."
        },
        nameTextStyle: {},
        nameGap: 15,
        silent: !1,
        triggerEvent: !1,
        tooltip: {
            show: !1
        },
        axisPointer: {},
        axisLine: {
            show: !0,
            onZero: !0,
            onZeroAxisIndex: null,
            lineStyle: {
                color: "#333",
                width: 1,
                type: "solid"
            },
            symbol: [ "none", "none" ],
            symbolSize: [ 10, 15 ]
        },
        axisTick: {
            show: !0,
            inside: !1,
            length: 5,
            lineStyle: {
                width: 1
            }
        },
        axisLabel: {
            show: !0,
            inside: !1,
            rotate: 0,
            showMinLabel: null,
            showMaxLabel: null,
            margin: 8,
            fontSize: 12
        },
        splitLine: {
            show: !0,
            lineStyle: {
                color: [ "#ccc" ],
                width: 1,
                type: "solid"
            }
        },
        splitArea: {
            show: !1,
            areaStyle: {
                color: [ "rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)" ]
            }
        }
    }, zf = {};
    zf.categoryAxis = g({
        boundaryGap: !0,
        deduplication: null,
        splitLine: {
            show: !1
        },
        axisTick: {
            alignWithLabel: !1,
            interval: "auto"
        },
        axisLabel: {
            interval: "auto"
        }
    }, gu), zf.valueAxis = g({
        boundaryGap: [ 0, 0 ],
        splitNumber: 5
    }, gu), zf.timeAxis = T({
        scale: !0,
        min: "dataMin",
        max: "dataMax"
    }, zf.valueAxis), zf.logAxis = T({
        scale: !0,
        logBase: 10
    }, zf.valueAxis);
    var Rf = [ "value", "category", "time", "log" ], ru = function(r, t, a, e) {
        I(Rf, function(o) {
            t.extend({
                type: r + "Axis." + o,
                mergeDefaultAndTheme: function(t, e) {
                    var n = this.layoutMode, i = n ? yi(t) : {};
                    g(t, e.getTheme().get(o + "Axis")), g(t, this.getDefaultOption()), t.type = a(r, t), 
                    n && mi(t, i, n);
                },
                optionUpdated: function() {
                    "category" === this.option.type && (this.__ordinalMeta = Nr.createByAxisModel(this));
                },
                getCategories: function(t) {
                    var e = this.option;
                    return "category" === e.type ? t ? e.data : this.__ordinalMeta.categories : void 0;
                },
                getOrdinalMeta: function() {
                    return this.__ordinalMeta;
                },
                defaultOption: function(t) {
                    for (var e = t[0], n = 1, i = t.length; n < i; n++) e = g(e, t[n], !0);
                    return e;
                }([ {}, zf[o + "Axis"], e ])
            });
        }), Ju.registerSubTypeDefaulter(r + "Axis", s(a, r));
    }, gu = {
        getMin: function(t) {
            var e = this.option, e = t || null == e.rangeStart ? e.min : e.rangeStart;
            return this.axis && null != e && "dataMin" !== e && "function" != typeof e && !p(e) && (e = this.axis.scale.parse(e)), 
            e;
        },
        getMax: function(t) {
            var e = this.option, e = t || null == e.rangeEnd ? e.max : e.rangeEnd;
            return this.axis && null != e && "dataMax" !== e && "function" != typeof e && !p(e) && (e = this.axis.scale.parse(e)), 
            e;
        },
        getNeedCrossZero: function() {
            var t = this.option;
            return null == t.rangeStart && null == t.rangeEnd && !t.scale;
        },
        getCoordSysModel: E,
        setRange: function(t, e) {
            this.option.rangeStart = t, this.option.rangeEnd = e;
        },
        resetRange: function() {
            this.option.rangeStart = this.option.rangeEnd = null;
        }
    }, Nf = Ju.extend({
        type: "cartesian2dAxis",
        axis: null,
        init: function() {
            Nf.superApply(this, "init", arguments), this.resetRange();
        },
        mergeOption: function() {
            Nf.superApply(this, "mergeOption", arguments), this.resetRange();
        },
        restoreData: function() {
            Nf.superApply(this, "restoreData", arguments), this.resetRange();
        },
        getCoordSysModel: function() {
            return this.ecModel.queryComponents({
                mainType: "grid",
                index: this.option.gridIndex,
                id: this.option.gridId
            })[0];
        }
    });
    g(Nf.prototype, gu), ru("x", Nf, la, gu = {
        offset: 0
    }), ru("y", Nf, la, gu), Ju.extend({
        type: "grid",
        dependencies: [ "xAxis", "yAxis" ],
        layoutMode: "box",
        coordinateSystem: null,
        defaultOption: {
            show: !1,
            zlevel: 0,
            z: 0,
            left: "10%",
            top: 60,
            right: "10%",
            bottom: 60,
            containLabel: !1,
            backgroundColor: "rgba(0,0,0,0)",
            borderWidth: 1,
            borderColor: "#ccc"
        }
    }), (gu = ua.prototype).type = "grid", gu.axisPointerEnabled = !0, gu.getRect = function() {
        return this._rect;
    }, gu.update = function(t, e) {
        var n = this._axesMap;
        this._updateScale(t, this.model), I(n.x, function(t) {
            jr(t.scale, t.model);
        }), I(n.y, function(t) {
            jr(t.scale, t.model);
        });
        var i = {};
        I(n.x, function(t) {
            ca(n, "y", t, i);
        }), I(n.y, function(t) {
            ca(n, "x", t, i);
        }), this.resize(this.model, e);
    }, gu.resize = function(t, e, n) {
        function i() {
            I(o, function(t) {
                var e, n, i = t.isHorizontal(), o = i ? [ 0, a.width ] : [ 0, a.height ], r = t.inverse ? 1 : 0;
                t.setExtent(o[r], o[1 - r]), e = i ? a.x : a.y, i = t.getExtent(), n = i[0] + i[1], 
                t.toGlobalCoord = "x" === t.dim ? function(t) {
                    return t + e;
                } : function(t) {
                    return n - t + e;
                }, t.toLocalCoord = "x" === t.dim ? function(t) {
                    return t - e;
                } : function(t) {
                    return n - t + e;
                };
            });
        }
        var a = gi(t.getBoxLayoutParams(), {
            width: e.getWidth(),
            height: e.getHeight()
        });
        this._rect = a;
        var o = this._axesList;
        i(), !n && t.get("containLabel") && (I(o, function(t) {
            var e, n, i;
            t.model.get("axisLabel.inside") || (e = function(t) {
                var e, n, i = t.model, o = t.scale;
                if (i.get("axisLabel.show") && !o.isBlank()) {
                    var r, a, i = "category" === t.type, s = o.getExtent(), l = i ? o.count() : (r = o.getTicks()).length, h = t.getLabelModel(), u = Zr(t), c = 1;
                    40 < l && (c = Math.ceil(l / 40));
                    for (var d = 0; d < l; d += c) {
                        var f = u(r ? r[d] : s[0] + d), p = h.getTextRect(f), g = (e = p, g = void 0, g = (h.get("rotate") || 0) * Math.PI / 180, 
                        p = (f = e.plain()).width, n = f.height, e = p * Math.cos(g) + n * Math.sin(g), 
                        g = p * Math.sin(g) + n * Math.cos(g), new kt(f.x, f.y, e, g));
                        a ? a.union(g) : a = g;
                    }
                    return a;
                }
            }(t)) && (n = t.isHorizontal() ? "height" : "width", i = t.model.get("axisLabel.margin"), 
            a[n] -= e[n] + i, "top" === t.position ? a.y += e.height + i : "left" === t.position && (a.x += e.width + i));
        }), i());
    }, gu.getAxis = function(t, e) {
        var n = this._axesMap[t];
        if (null != n) {
            if (null == e) for (var i in n) if (n.hasOwnProperty(i)) return n[i];
            return n[e];
        }
    }, gu.getAxes = function() {
        return this._axesList.slice();
    }, gu.getCartesian = function(t, e) {
        if (null != t && null != e) {
            var n = "x" + t + "y" + e;
            return this._coordsMap[n];
        }
        D(t) && (e = t.yAxisIndex, t = t.xAxisIndex);
        for (var i = 0, o = this._coordsList; i < o.length; i++) if (o[i].getAxis("x").index === t || o[i].getAxis("y").index === e) return o[i];
    }, gu.getCartesians = function() {
        return this._coordsList.slice();
    }, gu.convertToPixel = function(t, e, n) {
        return (e = this._findConvertTarget(t, e)).cartesian ? e.cartesian.dataToPoint(n) : e.axis ? e.axis.toGlobalCoord(e.axis.dataToCoord(n)) : null;
    }, gu.convertFromPixel = function(t, e, n) {
        return (e = this._findConvertTarget(t, e)).cartesian ? e.cartesian.pointToData(n) : e.axis ? e.axis.coordToData(e.axis.toLocalCoord(n)) : null;
    }, gu._findConvertTarget = function(t, e) {
        var n, i, o = e.seriesModel, r = e.xAxisModel || o && o.getReferringComponents("xAxis")[0], a = e.yAxisModel || o && o.getReferringComponents("yAxis")[0], s = e.gridModel, e = this._coordsList;
        return o ? m(e, n = o.coordinateSystem) < 0 && (n = null) : r && a ? n = this.getCartesian(r.componentIndex, a.componentIndex) : r ? i = this.getAxis("x", r.componentIndex) : a ? i = this.getAxis("y", a.componentIndex) : s && s.coordinateSystem === this && (n = this._coordsList[0]), 
        {
            cartesian: n,
            axis: i
        };
    }, gu.containPoint = function(t) {
        var e = this._coordsList[0];
        return e ? e.containPoint(t) : void 0;
    }, gu._initCartesian = function(r, t) {
        function e(o) {
            return function(t, e) {
                var n, i;
                ha(t, r) && (i = t.get("position"), "x" === o ? "top" !== i && "bottom" !== i && (i = a.bottom ? "top" : "bottom") : "left" !== i && "right" !== i && (i = a.left ? "right" : "left"), 
                a[i] = !0, i = "category" === (n = new Bf(o, function(t, e) {
                    if (e = t.get("type")) switch (e) {
                      case "category":
                        return new cf(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(), [ 1 / 0, -1 / 0 ]);

                      case "value":
                        return new pf();

                      default:
                        return (Rr.getClass(e) || pf).create(t);
                    }
                }(t), [ 0, 0 ], t.get("type"), i)).type, n.onBand = i && t.get("boundaryGap"), n.inverse = t.get("inverse"), 
                (t.axis = n).model = t, n.grid = this, n.index = e, this._axesList.push(n), s[o][e] = n, 
                l[o]++);
            };
        }
        var a = {
            left: !1,
            right: !1,
            top: !1,
            bottom: !1
        }, s = {
            x: {},
            y: {}
        }, l = {
            x: 0,
            y: 0
        };
        return t.eachComponent("xAxis", e("x"), this), t.eachComponent("yAxis", e("y"), this), 
        l.x && l.y ? void I((this._axesMap = s).x, function(i, o) {
            I(s.y, function(t, e) {
                var n = "x" + o + "y" + e;
                (e = new ta(n)).grid = this, e.model = r, this._coordsMap[n] = e, this._coordsList.push(e), 
                e.addAxis(i), e.addAxis(t);
            }, this);
        }, this) : (this._axesMap = {}, void (this._axesList = []));
    }, gu._updateScale = function(t, i) {
        function o(n, i) {
            I(n.mapDimension(i.dim, !0), function(t) {
                var e;
                i.scale.unionExtentFromData(n, gr(e = n, t) ? e.getCalculationInfo("stackResultDimension") : t);
            });
        }
        I(this._axesList, function(t) {
            t.scale.setExtent(1 / 0, -1 / 0);
        }), t.eachSeries(function(t) {
            var e, n;
            pa(t) && (n = (e = fa(t))[0], e = e[1], ha(n, i) && ha(e, i) && (n = this.getCartesian(n.componentIndex, e.componentIndex), 
            e = t.getData(), t = n.getAxis("x"), n = n.getAxis("y"), "list" === e.type && (o(e, t), 
            o(e, n))));
        }, this);
    }, gu.getTooltipAxes = function(n) {
        var i = [], o = [];
        return I(this.getCartesians(), function(t) {
            var e = null != n && "auto" !== n ? t.getAxis(n) : t.getBaseAxis(), t = t.getOtherAxis(e);
            m(i, e) < 0 && i.push(e), m(o, t) < 0 && o.push(t);
        }), {
            baseAxes: i,
            otherAxes: o
        };
    };
    var Ff = [ "xAxis", "yAxis" ];
    function Hf(t, e) {
        this.opt = e, this.axisModel = t, T(e, {
            labelOffset: 0,
            nameDirection: 1,
            tickDirection: 1,
            labelDirection: 1,
            silent: !0
        }), this.group = new Qs(), (e = new Qs({
            position: e.position.slice(),
            rotation: e.rotation
        })).updateTransform(), this._transform = e.transform, this._dumbGroup = e;
    }
    ua.create = function(i, o) {
        var r = [];
        return i.eachComponent("grid", function(t, e) {
            var n = new ua(t, i, o);
            n.name = "grid_" + e, n.resize(t, o, !0), t.coordinateSystem = n, r.push(n);
        }), i.eachSeries(function(t) {
            if (pa(t)) {
                var e = (i = fa(t))[0], n = i[1], i = e.getCoordSysModel();
                if ($a) {
                    if (!i) throw new Error('Grid "' + _(e.get("gridIndex"), e.get("gridId"), 0) + '" not found');
                    if (e.getCoordSysModel() !== n.getCoordSysModel()) throw new Error("xAxis and yAxis must use the same grid");
                }
                i = i.coordinateSystem, t.coordinateSystem = i.getCartesian(e.componentIndex, n.componentIndex);
            }
        }), r;
    }, ua.dimensions = ua.prototype.dimensions = ta.prototype.dimensions, ki.register("cartesian2d", ua);
    var Vf = Math.PI;
    Hf.prototype = {
        constructor: Hf,
        hasBuilder: function(t) {
            return !!Wf[t];
        },
        add: function(t) {
            Wf[t].call(this);
        },
        getGroup: function() {
            return this.group;
        }
    };
    var Wf = {
        axisLine: function() {
            var i, t, o, r, e, a, s, l = this.opt, n = this.axisModel;
            n.get("axisLine.show") && (t = this.axisModel.axis.getExtent(), e = this._transform, 
            i = [ t[0], 0 ], t = [ t[1], 0 ], e && (H(i, i, e), H(t, t, e)), o = M({
                lineCap: "round"
            }, n.getModel("axisLine.lineStyle").getLineStyle()), this.group.add(new fu({
                anid: "line",
                subPixelOptimize: !0,
                shape: {
                    x1: i[0],
                    y1: i[1],
                    x2: t[0],
                    y2: t[1]
                },
                style: o,
                strokeContainThreshold: l.strokeContainThreshold || 5,
                silent: !0,
                z2: 1
            })), r = n.get("axisLine.symbol"), e = n.get("axisLine.symbolSize"), "number" == typeof (n = n.get("axisLine.symbolOffset") || 0) && (n = [ n, n ]), 
            null != r && ("string" == typeof r && (r = [ r, r ]), "string" != typeof e && "number" != typeof e || (e = [ e, e ]), 
            a = e[0], s = e[1], I([ {
                rotate: l.rotation + Math.PI / 2,
                offset: n[0],
                r: 0
            }, {
                rotate: l.rotation - Math.PI / 2,
                offset: n[1],
                r: Math.sqrt((i[0] - t[0]) * (i[0] - t[0]) + (i[1] - t[1]) * (i[1] - t[1]))
            } ], function(t, e) {
                var n;
                "none" !== r[e] && null != r[e] && (n = vr(r[e], -a / 2, -s / 2, a, s, o.stroke, !0), 
                e = t.r + t.offset, e = [ i[0] + e * Math.cos(l.rotation), i[1] - e * Math.sin(l.rotation) ], 
                n.attr({
                    rotation: t.rotate,
                    position: e,
                    silent: !0,
                    z2: 11
                }), this.group.add(n));
            }, this)));
        },
        axisTickLabel: function() {
            var t, e, n, i, o = this.axisModel, r = this.opt, a = function(t, e, n) {
                var i = e.axis;
                if (e.get("axisTick.show") && !i.scale.isBlank()) {
                    for (var o = e.getModel("axisTick"), r = o.getModel("lineStyle"), a = o.get("length"), s = i.getTicksCoords(), l = [], h = [], u = t._transform, c = [], d = 0; d < s.length; d++) {
                        var f = s[d].coord;
                        l[0] = f, h[l[1] = 0] = f, h[1] = n.tickDirection * a, u && (H(l, l, u), H(h, h, u)), 
                        f = new fu({
                            anid: "tick_" + s[d].tickValue,
                            subPixelOptimize: !0,
                            shape: {
                                x1: l[0],
                                y1: l[1],
                                x2: h[0],
                                y2: h[1]
                            },
                            style: T(r.getLineStyle(), {
                                stroke: e.get("axisLine.lineStyle.color")
                            }),
                            z2: 2,
                            silent: !0
                        }), t.group.add(f), c.push(f);
                    }
                    return c;
                }
            }(this, o, r), s = function(s, l, h) {
                var u = l.axis;
                if (_(h.axisLabelShow, l.get("axisLabel.show")) && !u.scale.isBlank()) {
                    var c = l.getModel("axisLabel"), d = c.get("margin"), t = u.getViewLabels(), e = (_(h.labelRotate, c.get("rotate")) || 0) * Vf / 180, f = Xf(h.rotation, e, h.labelDirection), p = l.getCategories && l.getCategories(!0), g = [], m = Uf(l), y = l.get("triggerEvent");
                    return I(t, function(t, e) {
                        var n = t.tickValue, i = t.formattedLabel, o = t.rawLabel, r = c;
                        p && p[n] && p[n].textStyle && (r = new Zn(p[n].textStyle, c, l.ecModel));
                        var a = r.getTextColor() || l.get("axisLine.lineStyle.color");
                        Bn((t = new Wh({
                            anid: "label_" + n,
                            position: t = [ u.dataToCoord(n), h.labelOffset + h.labelDirection * d ],
                            rotation: f.rotation,
                            silent: m,
                            z2: 10
                        })).style, r, {
                            text: i,
                            textAlign: r.getShallow("align", !0) || f.textAlign,
                            textVerticalAlign: r.getShallow("verticalAlign", !0) || r.getShallow("baseline", !0) || f.textVerticalAlign,
                            textFill: "function" == typeof a ? a("category" === u.type ? o : "value" === u.type ? n + "" : n, e) : a
                        }), y && (t.eventData = Gf(l), t.eventData.targetType = "axisLabel", t.eventData.value = o), 
                        s._dumbGroup.add(t), t.updateTransform(), g.push(t), s.group.add(t), t.decomposeTransform();
                    }), g;
                }
            }(this, o, r), l = s, h = a;
            Qr((t = o).axis) || (e = t.get("axisLabel.showMinLabel"), n = t.get("axisLabel.showMaxLabel"), 
            i = (l = l || [])[0], r = l[1], s = l[l.length - 1], a = l[l.length - 2], o = (h = h || [])[0], 
            t = h[1], l = h[h.length - 1], h = h[h.length - 2], !1 === e ? (ga(i), ga(o)) : ma(i, r) && (e ? (ga(r), 
            ga(t)) : (ga(i), ga(o))), !1 === n ? (ga(s), ga(l)) : ma(a, s) && (n ? (ga(a), ga(h)) : (ga(s), 
            ga(l))));
        },
        axisName: function() {
            var t, e, n, i, o, r, a, s, l, h, u, c = this.opt, d = this.axisModel, f = _(c.axisName, d.get("name"));
            f && (e = d.get("nameLocation"), n = c.nameDirection, i = d.getModel("nameTextStyle"), 
            a = d.get("nameGap") || 0, r = (o = this.axisModel.axis.getExtent())[0] > o[1] ? -1 : 1, 
            r = [ "start" === e ? o[0] - r * a : "end" === e ? o[1] + r * a : (o[0] + o[1]) / 2, ya(e) ? c.labelOffset + n * a : 0 ], 
            null != (a = d.get("nameRotate")) && (a = a * Vf / 180), ya(e) ? t = Xf(c.rotation, null != a ? a : c.rotation, n) : (l = e, 
            h = o, s = ii((a || 0) - (s = c).rotation), h = h[0] > h[1], h = "start" === l && !h || "start" !== l && h, 
            t = {
                rotation: s,
                textAlign: h = oi(s - Vf / 2) ? (u = h ? "bottom" : "top", "center") : oi(s - 1.5 * Vf) ? (u = h ? "top" : "bottom", 
                "center") : (u = "middle", s < 1.5 * Vf && Vf / 2 < s ? h ? "left" : "right" : h ? "right" : "left"),
                textVerticalAlign: u
            }, null != (l = c.axisNameAvailableWidth) && (l = Math.abs(l / Math.sin(t.rotation)), 
            isFinite(l) || (l = null))), s = i.getFont(), u = (h = d.get("nameTruncate", !0) || {}).ellipsis, 
            c = _(c.nameTruncateMaxWidth, h.maxWidth, l), l = null != u && null != c ? qu(f, c, s, u, {
                minChar: 2,
                placeholder: h.placeholder
            }) : f, c = d.get("tooltip", !0), (h = {
                componentType: u = d.mainType,
                name: f,
                $vars: [ "name" ]
            })[u + "Index"] = d.componentIndex, Bn((c = new Wh({
                anid: "name",
                __fullText: f,
                __truncatedText: l,
                position: r,
                rotation: t.rotation,
                silent: Uf(d),
                z2: 1,
                tooltip: c && c.show ? M({
                    content: f,
                    formatter: function() {
                        return f;
                    },
                    formatterParams: h
                }, c) : null
            })).style, i, {
                text: l,
                textFont: s,
                textFill: i.getTextColor() || d.get("axisLine.lineStyle.color"),
                textAlign: i.get("align") || t.textAlign,
                textVerticalAlign: i.get("verticalAlign") || t.textVerticalAlign
            }), d.get("triggerEvent") && (c.eventData = Gf(d), c.eventData.targetType = "axisName", 
            c.eventData.name = f), this._dumbGroup.add(c), c.updateTransform(), this.group.add(c), 
            c.decomposeTransform());
        }
    }, Gf = Hf.makeAxisEventDataBase = function(t) {
        var e = {
            componentType: t.mainType,
            componentIndex: t.componentIndex
        };
        return e[t.mainType + "Index"] = t.componentIndex, e;
    }, Xf = Hf.innerTextLayout = function(t, e, n) {
        var i;
        return {
            rotation: t = ii(e - t),
            textAlign: n = oi(t) ? (i = 0 < n ? "top" : "bottom", "center") : oi(t - Vf) ? (i = 0 < n ? "bottom" : "top", 
            "center") : (i = "middle", 0 < t && t < Vf ? 0 < n ? "right" : "left" : 0 < n ? "left" : "right"),
            textVerticalAlign: i
        };
    }, Uf = Hf.isLabelSilent = function(t) {
        var e = t.get("tooltip");
        return t.get("silent") || !(t.get("triggerEvent") || e && e.show);
    }, Yf = I, qf = s, jf = $o({
        type: "axis",
        _axisPointer: null,
        axisPointerClass: null,
        render: function(t, e, n, i) {
            var o, r, a, s, l, h;
            this.axisPointerClass && (h = xa(o = t)) && (s = h.axisPointerModel, l = h.axis.scale, 
            r = s.option, a = s.get("status"), null != (o = s.get("value")) && (o = l.parse(o)), 
            s = wa(s), null == a && (r.status = s ? "show" : "hide"), (l = l.getExtent().slice())[0] > l[1] && l.reverse(), 
            (null == o || o > l[1]) && (o = l[1]), o < l[0] && (o = l[0]), r.value = o, s && (r.status = h.axis.scale.isBlank() ? "hide" : "show")), 
            jf.superApply(this, "render", arguments), Sa(this, t, 0, n, 0, !0);
        },
        updateAxisPointer: function(t, e, n, i) {
            Sa(this, t, 0, n, 0, !1);
        },
        remove: function(t, e) {
            var n = this._axisPointer;
            n && n.remove(e), jf.superApply(this, "remove", arguments);
        },
        dispose: function(t, e) {
            Ma(this, e), jf.superApply(this, "dispose", arguments);
        }
    }), Zf = [];
    jf.registerAxisPointerClass = function(t, e) {
        if ($a && Zf[t]) throw new Error("axisPointer " + t + " exists");
        Zf[t] = e;
    }, jf.getAxisPointerClass = function(t) {
        return t && Zf[t];
    };
    var Kf = [ "axisLine", "axisTickLabel", "axisName" ], $f = [ "splitArea", "splitLine" ], Qf = jf.extend({
        type: "cartesianAxis",
        axisPointerClass: "CartesianAxisPointer",
        render: function(e, t, n, i) {
            this.group.removeAll();
            var o, r, a = this._axisGroup;
            this._axisGroup = new Qs(), this.group.add(this._axisGroup), e.get("show") && (r = Ta(o = e.getCoordSysModel(), e), 
            r = new Hf(e, r), I(Kf, r.add, r), this._axisGroup.add(r.getGroup()), I($f, function(t) {
                e.get(t + ".show") && this["_" + t](e, o);
            }, this), Yn(a, this._axisGroup, e), Qf.superCall(this, "render", e, t, n, i));
        },
        remove: function() {
            this._splitAreaColors = null;
        },
        _splitLine: function(t, e) {
            var n = t.axis;
            if (!n.scale.isBlank()) for (var i = t.getModel("splitLine"), o = x(o = (t = i.getModel("lineStyle")).get("color")) ? o : [ o ], r = e.coordinateSystem.getRect(), a = n.isHorizontal(), s = 0, l = n.getTicksCoords({
                tickModel: i
            }), h = [], u = [], c = t.getLineStyle(), d = 0; d < l.length; d++) {
                var f = n.toGlobalCoord(l[d].coord);
                a ? (h[0] = f, h[1] = r.y, u[0] = f, u[1] = r.y + r.height) : (h[0] = r.x, h[1] = f, 
                u[0] = r.x + r.width, u[1] = f);
                var p = s++ % o.length, f = l[d].tickValue;
                this._axisGroup.add(new fu({
                    anid: null != f ? "line_" + l[d].tickValue : null,
                    subPixelOptimize: !0,
                    shape: {
                        x1: h[0],
                        y1: h[1],
                        x2: u[0],
                        y2: u[1]
                    },
                    style: T({
                        stroke: o[p]
                    }, c),
                    silent: !0
                }));
            }
        },
        _splitArea: function(t, e) {
            var n = t.axis;
            if (!n.scale.isBlank()) {
                var i = t.getModel("splitArea"), o = (t = i.getModel("areaStyle")).get("color"), r = e.coordinateSystem.getRect(), a = n.getTicksCoords({
                    tickModel: i,
                    clamp: !0
                });
                if (a.length) {
                    var s = o.length, l = this._splitAreaColors, h = L(), u = 0;
                    if (l) for (var c = 0; c < a.length; c++) {
                        var d = l.get(a[c].tickValue);
                        if (null != d) {
                            u = (d + (s - 1) * c) % s;
                            break;
                        }
                    }
                    for (var f = n.toGlobalCoord(a[0].coord), p = t.getAreaStyle(), o = x(o) ? o : [ o ], c = 1; c < a.length; c++) {
                        var g, m, y, v, _ = n.toGlobalCoord(a[c].coord), f = n.isHorizontal() ? (g = f, 
                        m = r.y, y = _ - g, v = r.height, g + y) : (g = r.x, m = f, y = r.width, m + (v = _ - m));
                        null != (_ = a[c - 1].tickValue) && h.set(_, u), this._axisGroup.add(new cu({
                            anid: null != _ ? "area_" + _ : null,
                            shape: {
                                x: g,
                                y: m,
                                width: y,
                                height: v
                            },
                            style: T({
                                fill: o[u]
                            }, p),
                            silent: !0
                        })), u = (u + 1) % s;
                    }
                    this._splitAreaColors = h;
                }
            }
        }
    });
    function Jf(t, e) {
        var n, i = [], o = t.seriesIndex;
        if (null == o || !(n = e.getSeriesByIndex(o))) return {
            point: []
        };
        var r = n.getData();
        return null == (e = Ae(r, t)) || e < 0 || x(e) ? {
            point: []
        } : (o = r.getItemGraphicEl(e), t = n.coordinateSystem, n.getTooltipPosition ? i = n.getTooltipPosition(e) || [] : t && t.dataToPoint ? i = t.dataToPoint(r.getValues(b(t.dimensions, function(t) {
            return r.mapDimension(t);
        }), e, !0)) || [] : o && ((e = o.getBoundingRect().clone()).applyTransform(o.transform), 
        i = [ e.x + e.width / 2, e.y + e.height / 2 ]), {
            point: i,
            el: o
        });
    }
    Qf.extend({
        type: "xAxis"
    }), Qf.extend({
        type: "yAxis"
    }), $o({
        type: "grid",
        render: function(t) {
            this.group.removeAll(), t.get("show") && this.group.add(new cu({
                shape: t.coordinateSystem.getRect(),
                style: T({
                    fill: t.get("backgroundColor")
                }, t.getItemStyle()),
                silent: !0,
                z2: -1
            }));
        }
    }), Go(function(t) {
        t.xAxis && t.yAxis && !t.grid && (t.grid = {});
    }), qo({
        seriesType: "line",
        performRawSeries: !0,
        reset: function(r, t) {
            var e = r.getData(), a = r.get("symbol"), s = r.get("symbolSize"), n = r.get("symbolKeepAspect"), l = f(a), h = f(s), u = l || h, i = !l && a ? a : "circle", o = h ? null : s;
            return e.setVisual({
                legendSymbol: "line",
                symbol: i,
                symbolSize: o,
                symbolKeepAspect: n
            }), t.isSeriesFiltered(r) ? void 0 : {
                dataEach: e.hasItemOption || u ? function(t, e) {
                    var n, i, o;
                    u && (n = r.getRawValue(e), i = r.getDataParams(e), l && t.setItemVisual(e, "symbol", a(n, i)), 
                    h && t.setItemVisual(e, "symbolSize", s(n, i))), t.hasItemOption && (n = (o = t.getItemModel(e)).getShallow("symbol", !0), 
                    i = o.getShallow("symbolSize", !0), o = o.getShallow("symbolKeepAspect", !0), null != n && t.setItemVisual(e, "symbol", n), 
                    null != i && t.setItemVisual(e, "symbolSize", i), null != o && t.setItemVisual(e, "symbolKeepAspect", o));
                } : null
            };
        }
    }), Yo({
        seriesType: "line",
        plan: Yc(),
        reset: function(t) {
            var e = t.getData(), u = t.coordinateSystem, c = t.pipelineContext.large;
            if (u) {
                var d = b(u.dimensions, function(t) {
                    return e.mapDimension(t);
                }).slice(0, 2), f = d.length, t = e.getCalculationInfo("stackResultDimension");
                return gr(e, d[0]) && (d[0] = t), gr(e, d[1]) && (d[1] = t), f && {
                    progress: function(t, e) {
                        for (var n, i, o = t.end - t.start, r = c && new Float32Array(o * f), a = t.start, s = 0, l = [], h = []; a < t.end; a++) i = 1 === f ? (n = e.get(d[0], a), 
                        !isNaN(n) && u.dataToPoint(n, null, h)) : (n = l[0] = e.get(d[0], a), i = l[1] = e.get(d[1], a), 
                        !isNaN(n) && !isNaN(i) && u.dataToPoint(l, null, h)), c ? (r[s++] = i ? i[0] : NaN, 
                        r[s++] = i ? i[1] : NaN) : e.setItemLayout(a, i && i.slice() || [ NaN, NaN ]);
                        c && e.setLayout("symbolPoints", r);
                    }
                };
            }
        }
    }), Xo(Bu.PROCESSOR.STATISTIC, {
        seriesType: "line",
        modifyOutputEnd: !0,
        reset: function(t) {
            var e, n, i = t.getData(), o = t.get("sampling"), r = t.coordinateSystem;
            "cartesian2d" === r.type && o && (e = r.getBaseAxis(), r = r.getOtherAxis(e), e = (e = e.getExtent())[1] - e[0], 
            1 < (e = Math.round(i.count() / e)) && ("string" == typeof o ? n = hf[o] : "function" == typeof o && (n = o), 
            n && t.setData(i.downSample(i.mapDimension(r.dim), 1 / e, n, lf))));
        }
    });
    var tp = I, ep = s, np = Pe(), ip = (Ko({
        type: "axisPointer",
        coordSysAxesInfo: null,
        defaultOption: {
            show: "auto",
            triggerOn: null,
            zlevel: 0,
            z: 50,
            type: "line",
            snap: !1,
            triggerTooltip: !0,
            value: null,
            status: null,
            link: [],
            animation: null,
            animationDurationUpdate: 200,
            lineStyle: {
                color: "#aaa",
                width: 1,
                type: "solid"
            },
            shadowStyle: {
                color: "rgba(150,150,150,0.3)"
            },
            label: {
                show: !0,
                formatter: null,
                precision: "auto",
                margin: 3,
                color: "#fff",
                padding: [ 5, 7, 5, 7 ],
                backgroundColor: "auto",
                borderColor: null,
                borderWidth: 0,
                shadowBlur: 3,
                shadowColor: "#aaa"
            },
            handle: {
                show: !1,
                icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",
                size: 45,
                margin: 50,
                color: "#333",
                shadowBlur: 3,
                shadowColor: "#aaa",
                shadowOffsetX: 0,
                shadowOffsetY: 2,
                throttle: 40
            }
        }
    }), Pe()), op = I, rp = $o({
        type: "axisPointer",
        render: function(t, e, n) {
            var e = e.getComponent("tooltip"), i = t.get("triggerOn") || e && e.get("triggerOn") || "mousemove|click";
            Pa("axisPointer", n, function(t, e, n) {
                "none" !== i && ("leave" === t || 0 <= i.indexOf(t)) && n({
                    type: "updateAxisPointer",
                    currTrigger: t,
                    x: e && e.offsetX,
                    y: e && e.offsetY
                });
            });
        },
        remove: function(t, e) {
            Ea(e.getZr(), "axisPointer"), rp.superApply(this._model, "remove", arguments);
        },
        dispose: function(t, e) {
            Ea("axisPointer", e), rp.superApply(this._model, "dispose", arguments);
        }
    }), ap = Pe(), sp = S, lp = v;
    Re((Ba.prototype = {
        _group: null,
        _lastGraphicKey: null,
        _handle: null,
        _dragging: !1,
        _lastValue: null,
        _lastStatus: null,
        _payloadInfo: null,
        animationThreshold: 15,
        render: function(t, e, n, i) {
            var o = e.get("value"), r = e.get("status");
            if (this._axisModel = t, this._axisPointerModel = e, this._api = n, i || this._lastValue !== o || this._lastStatus !== r) {
                this._lastValue = o, this._lastStatus = r;
                var a = this._group, i = this._handle;
                if (!r || "hide" === r) return a && a.hide(), void (i && i.hide());
                a && a.show(), i && i.show(), r = {}, this.makeElOption(r, o, t, e, n), (i = r.graphicKey) !== this._lastGraphicKey && this.clear(n), 
                this._lastGraphicKey = i, i = this._moveAnimation = this.determineAnimation(t, e), 
                a ? (i = s(za, e, i), this.updatePointerEl(a, r, i, e), this.updateLabelEl(a, r, i, e)) : (a = this._group = new Qs(), 
                this.createPointerEl(a, r, t, e), this.createLabelEl(a, r, t, e), n.getZr().add(a)), 
                Fa(a, e, !0), this._renderHandle(o);
            }
        },
        remove: function(t) {
            this.clear(t);
        },
        dispose: function(t) {
            this.clear(t);
        },
        determineAnimation: function(t, e) {
            var n = e.get("animation"), i = t.axis, o = "category" === i.type;
            return !(!(e = e.get("snap")) && !o) && ("auto" !== n && null != n ? !0 === n : (n = this.animationThreshold, 
            o && i.getBandWidth() > n || !!e && (t = xa(t).seriesDataCount, i = i.getExtent(), 
            Math.abs(i[0] - i[1]) / t > n)));
        },
        makeElOption: function() {},
        createPointerEl: function(t, e) {
            var n = e.pointer;
            n && (e = ap(t).pointerEl = new Ou[n.type](sp(e.pointer)), t.add(e));
        },
        createLabelEl: function(t, e, n, i) {
            e.label && (e = ap(t).labelEl = new cu(sp(e.label)), t.add(e), Ra(e, i));
        },
        updatePointerEl: function(t, e, n) {
            (t = ap(t).pointerEl) && e.pointer && (t.setStyle(e.pointer.style), n(t, {
                shape: e.pointer.shape
            }));
        },
        updateLabelEl: function(t, e, n, i) {
            (t = ap(t).labelEl) && (t.setStyle(e.label.style), n(t, {
                shape: e.label.shape,
                position: e.label.position
            }), Ra(t, i));
        },
        _renderHandle: function(t) {
            if (!this._dragging && this.updateHandleTransform) {
                var e, n = this._axisPointerModel, i = this._api.getZr(), o = this._handle, r = n.getModel("handle"), a = n.get("status");
                if (!r.get("show") || !a || "hide" === a) return o && i.remove(o), void (this._handle = null);
                this._handle || (e = !0, o = this._handle = qn(r.get("icon"), {
                    cursor: "move",
                    draggable: !0,
                    onmousemove: function(t) {
                        bs(t.event);
                    },
                    onmousedown: lp(this._onHandleDragMove, this, 0, 0),
                    drift: lp(this._onHandleDragMove, this),
                    ondragend: lp(this._onHandleDragEnd, this)
                }), i.add(o)), Fa(o, n, !1), o.setStyle(r.getItemStyle(null, [ "color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY" ])), 
                x(n = r.get("size")) || (n = [ n, n ]), o.attr("scale", [ n[0] / 2, n[1] / 2 ]), 
                function(t, e, n, i) {
                    var o = t[e];
                    if (o) {
                        var r = o[Kc] || o, a = o[Qc];
                        if (o[$c] !== n || a !== i) {
                            if (null == n) return t[e] = r;
                            (o = t[e] = ho(r, n, !1))[Kc] = r, o[Qc] = i, o[$c] = n;
                        }
                    }
                }(this, "_doDispatchAxisPointer", r.get("throttle") || 0, "fixRate"), this._moveHandleToValue(t, e);
            }
        },
        _moveHandleToValue: function(t, e) {
            za(this._axisPointerModel, !e && this._moveAnimation, this._handle, Na(this.getHandleTransform(t, this._axisModel, this._axisPointerModel)));
        },
        _onHandleDragMove: function(t, e) {
            var n = this._handle;
            n && (this._dragging = !0, e = this.updateHandleTransform(Na(n), [ t, e ], this._axisModel, this._axisPointerModel), 
            this._payloadInfo = e, n.stopAnimation(), n.attr(Na(e)), ap(n).lastProp = null, 
            this._doDispatchAxisPointer());
        },
        _doDispatchAxisPointer: function() {
            var t, e;
            this._handle && (t = this._payloadInfo, e = this._axisModel, this._api.dispatchAction({
                type: "updateAxisPointer",
                x: t.cursorPoint[0],
                y: t.cursorPoint[1],
                tooltipOption: t.tooltipOption,
                axesInfo: [ {
                    axisDim: e.axis.dim,
                    axisIndex: e.componentIndex
                } ]
            }));
        },
        _onHandleDragEnd: function() {
            var t;
            this._dragging = !1, this._handle && (t = this._axisPointerModel.get("value"), this._moveHandleToValue(t), 
            this._api.dispatchAction({
                type: "hideTip"
            }));
        },
        getHandleTransform: null,
        updateHandleTransform: null,
        clear: function(t) {
            this._lastValue = null, this._lastStatus = null;
            var e = t.getZr(), n = this._group, t = this._handle;
            e && n && (this._lastGraphicKey = null, n && e.remove(n), t && e.remove(t), this._group = null, 
            this._handle = null, this._payloadInfo = null);
        },
        doClear: function() {},
        buildLabel: function(t, e, n) {
            return {
                x: t[n = n || 0],
                y: t[1 - n],
                width: e[n],
                height: e[1 - n]
            };
        }
    }).constructor = Ba);
    var gu = Ba.extend({
        makeElOption: function(t, e, n, i, o) {
            var r = n.axis, a = r.grid, s = i.get("type"), l = Wa(a, r).getOtherAxis(r).getGlobalExtent(), h = r.toGlobalCoord(r.dataToCoord(e, !0));
            s && "none" !== s && (c = (d = i).get("type"), d = d.getModel(c + "Style"), "line" === c ? (f = d.getLineStyle()).fill = null : "shadow" === c && ((f = d.getAreaStyle()).stroke = null), 
            d = f, (f = hp[s](r, h, l)).style = d, t.graphicKey = f.type, t.pointer = f);
            var u, c, d, f = Ta(a.model, n), a = e;
            e = t, t = n, n = i, i = o, f = Hf.innerTextLayout((o = f).rotation, 0, o.labelDirection), 
            o.labelMargin = n.get("label.margin"), u = e, c = n, s = i, h = {
                position: Va((r = t).axis, a, o),
                align: f.textAlign,
                verticalAlign: f.textVerticalAlign
            }, l = Ha(c.get("value"), r.axis, r.ecModel, c.get("seriesDataIndices"), {
                precision: c.get("label.precision"),
                formatter: c.get("label.formatter")
            }), d = c.getModel("label"), e = Gu(d.get("padding") || 0), n = d.getFont(), i = Gt(l, n), 
            t = h.position, a = i.width + e[1] + e[3], o = i.height + e[0] + e[2], "right" === (f = h.align) && (t[0] -= a), 
            "center" === f && (t[0] -= a / 2), "bottom" === (c = h.verticalAlign) && (t[1] -= o), 
            "middle" === c && (t[1] -= o / 2), i = t, f = a, h = o, s = (c = s).getWidth(), 
            c = c.getHeight(), i[0] = Math.min(i[0] + f, s) - f, i[1] = Math.min(i[1] + h, c) - h, 
            i[0] = Math.max(i[0], 0), i[1] = Math.max(i[1], 0), (i = d.get("backgroundColor")) && "auto" !== i || (i = r.get("axisLine.lineStyle.color")), 
            u.label = {
                shape: {
                    x: 0,
                    y: 0,
                    width: a,
                    height: o,
                    r: d.get("borderRadius")
                },
                position: t.slice(),
                style: {
                    text: l,
                    textFont: n,
                    textFill: d.getTextColor(),
                    textPosition: "inside",
                    textPadding: e,
                    fill: i,
                    stroke: d.get("borderColor") || "transparent",
                    lineWidth: d.get("borderWidth") || 0,
                    shadowBlur: d.get("shadowBlur"),
                    shadowColor: d.get("shadowColor"),
                    shadowOffsetX: d.get("shadowOffsetX"),
                    shadowOffsetY: d.get("shadowOffsetY")
                },
                z2: 10
            };
        },
        getHandleTransform: function(t, e, n) {
            var i = Ta(e.axis.grid.model, e, {
                labelInside: !1
            });
            return i.labelMargin = n.get("handle.margin"), {
                position: Va(e.axis, t, i),
                rotation: i.rotation + (i.labelDirection < 0 ? Math.PI : 0)
            };
        },
        updateHandleTransform: function(t, e, n) {
            var i = n.axis, o = i.grid, r = i.getGlobalExtent(!0), n = Wa(o, i).getOtherAxis(i).getGlobalExtent(), o = "x" === i.dim ? 0 : 1;
            return (i = t.position)[o] += e[o], i[o] = Math.min(r[1], i[o]), i[o] = Math.max(r[0], i[o]), 
            (n = [ n = (n[1] + n[0]) / 2, n ])[o] = i[o], {
                position: i,
                rotation: t.rotation,
                cursorPoint: n,
                tooltipOption: [ {
                    verticalAlign: "middle"
                }, {
                    align: "center"
                } ][o]
            };
        }
    }), hp = {
        line: function(t, e, n) {
            var i;
            return {
                type: "Line",
                subPixelOptimize: !0,
                shape: (i = [ e, n[0] ], n = [ e, n[1] ], {
                    x1: i[t = (t = Ga(t)) || 0],
                    y1: i[1 - t],
                    x2: n[t],
                    y2: n[1 - t]
                })
            };
        },
        shadow: function(t, e, n) {
            var i = Math.max(1, t.getBandWidth()), o = n[1] - n[0];
            return {
                type: "Rect",
                shape: (o = [ i, o ], {
                    x: (n = [ e - i / 2, n[0] ])[t = (t = Ga(t)) || 0],
                    y: n[1 - t],
                    width: o[t],
                    height: o[1 - t]
                })
            };
        }
    };
    jf.registerAxisPointerClass("CartesianAxisPointer", gu), Go(function(t) {
        var e;
        t && (t.axisPointer && 0 !== t.axisPointer.length || (t.axisPointer = {}), (e = t.axisPointer.link) && !x(e) && (t.axisPointer.link = [ e ]));
    }), Xo(Bu.PROCESSOR.STATISTIC, function(t, e) {
        t.getComponent("axisPointer").coordSysAxesInfo = va(t, e);
    }), Uo({
        type: "updateAxisPointer",
        event: "updateAxisPointer",
        update: ":updateAxisPointer"
    }, function(t, e, n) {
        var i, o, r = t.currTrigger, a = [ t.x, t.y ], s = t, l = t.dispatchAction || v(n.dispatchAction, n), h = e.getComponent("axisPointer").coordSysAxesInfo;
        if (h) {
            Aa(a) && (a = Jf({
                seriesIndex: s.seriesIndex,
                dataIndex: s.dataIndex
            }, e).point);
            var u = Aa(a), c = s.axesInfo, d = h.axesInfo, f = "leave" === r || Aa(a), p = {}, g = {}, s = {
                list: [],
                map: {}
            }, m = {
                showPointer: ep(Ca, g),
                showTooltip: ep(Da, s)
            };
            tp(h.coordSysMap, function(t, e) {
                var i = u || t.containPoint(a);
                tp(h.coordSysAxesInfo[e], function(t) {
                    var e = t.axis, n = function(t, e) {
                        for (var n = 0; n < (t || []).length; n++) {
                            var i = t[n];
                            if (e.axis.dim === i.axisDim && e.axis.model.componentIndex === i.axisIndex) return i;
                        }
                    }(c, t);
                    f || !i || c && !n || (null != (n = n && n.value) || u || (n = e.pointToData(a)), 
                    null != n && Ia(t, n, m, !1, p));
                });
            });
            var y = {};
            return tp(d, function(n, t) {
                var i = n.linkGroup;
                i && !g[t] && tp(i.axesInfo, function(t, e) {
                    e = g[e], t !== n && e && (e = e.value, i.mapper && (e = n.axis.scale.parse(i.mapper(e, ka(t), ka(n)))), 
                    y[n.key] = e);
                });
            }), tp(y, function(t, e) {
                Ia(d[e], t, m, !0, p);
            }), i = g, r = d, o = p.axesInfo = [], tp(r, function(t, e) {
                var n = t.axisPointerModel.option;
                (e = i[e]) ? (t.useHandle || (n.status = "show"), n.value = e.value, n.seriesDataIndices = (e.payloadBatch || []).slice()) : t.useHandle || (n.status = "hide"), 
                "show" === n.status && o.push({
                    axisDim: t.axis.dim,
                    axisIndex: t.axis.model.componentIndex,
                    value: n.value
                });
            }), function(t, e, n, i) {
                if (Aa(e) || !t.list.length) return i({
                    type: "hideTip"
                });
                var o = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
                i({
                    type: "showTip",
                    escapeConnect: !0,
                    x: e[0],
                    y: e[1],
                    tooltipOption: n.tooltipOption,
                    position: n.position,
                    dataIndexInside: o.dataIndexInside,
                    dataIndex: o.dataIndex,
                    seriesIndex: o.seriesIndex,
                    dataByCoordSys: t.list
                });
            }(s, a, t, l), function(t, e) {
                var n = e.getZr(), i = "axisPointerLastHighlights", o = np(n)[i] || {}, r = np(n)[i] = {};
                tp(t, function(t) {
                    "show" === (t = t.axisPointerModel.option).status && tp(t.seriesDataIndices, function(t) {
                        var e = t.seriesIndex + " | " + t.dataIndex;
                        r[e] = t;
                    });
                });
                var a = [], s = [];
                I(o, function(t, e) {
                    r[e] || s.push(t);
                }), I(r, function(t, e) {
                    o[e] || a.push(t);
                }), s.length && e.dispatchAction({
                    type: "downplay",
                    escapeConnect: !0,
                    batch: s
                }), a.length && e.dispatchAction({
                    type: "highlight",
                    escapeConnect: !0,
                    batch: a
                });
            }(d, n), p;
        }
    }), Ko({
        type: "tooltip",
        dependencies: [ "axisPointer" ],
        defaultOption: {
            zlevel: 0,
            z: 60,
            show: !0,
            showContent: !0,
            trigger: "item",
            triggerOn: "mousemove|click",
            alwaysShowContent: !1,
            displayMode: "single",
            renderMode: "auto",
            confine: !1,
            showDelay: 0,
            hideDelay: 100,
            transitionDuration: .4,
            enterable: !1,
            backgroundColor: "rgba(50,50,50,0.7)",
            borderColor: "#333",
            borderRadius: 4,
            borderWidth: 0,
            padding: 5,
            extraCssText: "",
            axisPointer: {
                type: "line",
                axis: "auto",
                animation: "auto",
                animationDurationUpdate: 200,
                animationEasingUpdate: "exponentialOut",
                crossStyle: {
                    color: "#999",
                    width: 1,
                    type: "dashed",
                    textStyle: {}
                }
            },
            textStyle: {
                color: "#fff",
                fontSize: 14
            }
        }
    });
    function up(t, e) {
        return t = (t || "").toLowerCase().replace(/-(.)/g, function(t, e) {
            return e.toUpperCase();
        }), e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)), t;
    }
    var cp = I, dp = [ "", "-webkit-", "-moz-", "-o-" ];
    Xa.prototype = {
        constructor: Xa,
        _enterable: !0,
        update: function() {
            var t = this._container, e = t.currentStyle || document.defaultView.getComputedStyle(t);
            "absolute" !== (t = t.style).position && "absolute" !== e.position && (t.position = "relative");
        },
        show: function(t) {
            clearTimeout(this._hideTimeout);
            var i, n, o, e, r, a, s, l, h, u, c, d = this.el;
            d.style.cssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + (s = [], 
            l = (i = t).get("transitionDuration"), h = i.get("backgroundColor"), u = i.getModel("textStyle"), 
            c = i.get("padding"), l && s.push((a = "left " + (r = l) + "s " + (l = "cubic-bezier(0.23, 1, 0.32, 1)") + ",top " + r + "s " + l, 
            b(dp, function(t) {
                return t + "transition:" + a;
            }).join(";"))), h && (ts.canvasSupported ? s.push("background-Color:" + h) : (s.push("background-Color:#" + ((e = gt(e = h)) ? ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) : void 0)), 
            s.push("filter:alpha(opacity=70)"))), cp([ "width", "color", "radius" ], function(t) {
                var e = "border-" + t, n = up(e);
                null != (n = i.get(n)) && s.push(e + ":" + n + ("color" === t ? "" : "px"));
            }), s.push((o = [], e = (n = u).get("fontSize"), (u = n.getTextColor()) && o.push("color:" + u), 
            o.push("font:" + n.getFont()), e && o.push("line-height:" + Math.round(3 * e / 2) + "px"), 
            cp([ "decoration", "align" ], function(t) {
                var e = n.get(t);
                e && o.push("text-" + t + ":" + e);
            }), o.join(";"))), null != c && s.push("padding:" + Gu(c).join("px ") + "px"), s.join(";") + ";") + ";left:" + this._x + "px;top:" + this._y + "px;" + (t.get("extraCssText") || ""), 
            d.style.display = d.innerHTML ? "block" : "none", d.style.pointerEvents = this._enterable ? "auto" : "none", 
            this._show = !0;
        },
        setContent: function(t) {
            this.el.innerHTML = null == t ? "" : t;
        },
        setEnterable: function(t) {
            this._enterable = t;
        },
        getSize: function() {
            var t = this.el;
            return [ t.clientWidth, t.clientHeight ];
        },
        moveTo: function(t, e) {
            var n = this._zr;
            n && n.painter && (i = n.painter.getViewportRootOffset()) && (t += i.offsetLeft, 
            e += i.offsetTop);
            var i = this.el.style;
            i.left = t + "px", i.top = e + "px", this._x = t, this._y = e;
        },
        hide: function() {
            this.el.style.display = "none", this._show = !1;
        },
        hideLater: function(t) {
            !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, 
            this._show = !1, this._hideTimeout = setTimeout(v(this.hide, this), t)) : this.hide());
        },
        isShow: function() {
            return this._show;
        },
        getOuterSize: function() {
            var t, e = this.el.clientWidth, n = this.el.clientHeight;
            return document.defaultView && document.defaultView.getComputedStyle && (t = document.defaultView.getComputedStyle(this.el)) && (e += parseInt(t.borderLeftWidth, 10) + parseInt(t.borderRightWidth, 10), 
            n += parseInt(t.borderTopWidth, 10) + parseInt(t.borderBottomWidth, 10)), {
                width: e,
                height: n
            };
        }
    }, Ua.prototype = {
        constructor: Ua,
        _enterable: !0,
        update: function() {},
        show: function() {
            this._hideTimeout && clearTimeout(this._hideTimeout), this.el.attr("show", !0), 
            this._show = !0;
        },
        setContent: function(t, e, n) {
            this.el && this._zr.remove(this.el);
            for (var i = {}, o = t, r = "{marker", a = o.indexOf(r); 0 <= a; ) {
                var s = o.indexOf("|}"), l = o.substr(a + r.length, s - a - r.length);
                i["marker" + l] = -1 < l.indexOf("sub") ? {
                    textWidth: 4,
                    textHeight: 4,
                    textBorderRadius: 2,
                    textBackgroundColor: e[l],
                    textOffset: [ 3, 0 ]
                } : {
                    textWidth: 10,
                    textHeight: 10,
                    textBorderRadius: 5,
                    textBackgroundColor: e[l]
                }, a = (o = o.substr(s + 1)).indexOf("{marker");
            }
            this.el = new Wh({
                style: {
                    rich: i,
                    text: t,
                    textLineHeight: 20,
                    textBackgroundColor: n.get("backgroundColor"),
                    textBorderRadius: n.get("borderRadius"),
                    textFill: n.get("textStyle.color"),
                    textPadding: n.get("padding")
                },
                z: n.get("z")
            }), this._zr.add(this.el);
            var h = this;
            this.el.on("mouseover", function() {
                h._enterable && (clearTimeout(h._hideTimeout), h._show = !0), h._inContent = !0;
            }), this.el.on("mouseout", function() {
                h._enterable && h._show && h.hideLater(h._hideDelay), h._inContent = !1;
            });
        },
        setEnterable: function(t) {
            this._enterable = t;
        },
        getSize: function() {
            var t = this.el.getBoundingRect();
            return [ t.width, t.height ];
        },
        moveTo: function(t, e) {
            this.el && this.el.attr("position", [ t, e ]);
        },
        hide: function() {
            this.el && this.el.hide(), this._show = !1;
        },
        hideLater: function(t) {
            !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, 
            this._show = !1, this._hideTimeout = setTimeout(v(this.hide, this), t)) : this.hide());
        },
        isShow: function() {
            return this._show;
        },
        getOuterSize: function() {
            var t = this.getSize();
            return {
                width: t[0],
                height: t[1]
            };
        }
    };
    var fp = v, pp = I, gp = ti, mp = new cu({
        shape: {
            x: -1,
            y: -1,
            width: 2,
            height: 2
        }
    });
    $o({
        type: "tooltip",
        init: function(t, e) {
            var n;
            ts.node || (t = t.getComponent("tooltip").get("renderMode"), this._renderMode = Be(t), 
            "html" === this._renderMode ? (n = new Xa(e.getDom(), e), this._newLine = "<br/>") : (n = new Ua(e), 
            this._newLine = "\n"), this._tooltipContent = n);
        },
        render: function(t, e, n) {
            ts.node || (this.group.removeAll(), this._tooltipModel = t, this._ecModel = e, this._api = n, 
            this._lastDataByCoordSys = null, this._alwaysShowContent = t.get("alwaysShowContent"), 
            (n = this._tooltipContent).update(), n.setEnterable(t.get("enterable")), this._initGlobalListener(), 
            this._keepShow());
        },
        _initGlobalListener: function() {
            var i = this._tooltipModel.get("triggerOn");
            Pa("itemTooltip", this._api, fp(function(t, e, n) {
                "none" !== i && (0 <= i.indexOf(t) ? this._tryShow(e, n) : "leave" === t && this._hide(n));
            }, this));
        },
        _keepShow: function() {
            var t, e = this._tooltipModel, n = this._ecModel, i = this._api;
            null != this._lastX && null != this._lastY && "none" !== e.get("triggerOn") && (t = this, 
            clearTimeout(this._refreshUpdateTimeout), this._refreshUpdateTimeout = setTimeout(function() {
                i.isDisposed() || t.manuallyShowTip(e, n, i, {
                    x: t._lastX,
                    y: t._lastY
                });
            }));
        },
        manuallyShowTip: function(t, e, n, i) {
            var o, r, a;
            i.from === this.uid || ts.node || (o = qa(i, n), this._ticket = "", a = i.dataByCoordSys, 
            i.tooltip && null != i.x && null != i.y ? ((r = mp).position = [ i.x, i.y ], r.update(), 
            r.tooltip = i.tooltip, this._tryShow({
                offsetX: i.x,
                offsetY: i.y,
                target: r
            }, o)) : a ? this._tryShow({
                offsetX: i.x,
                offsetY: i.y,
                position: i.position,
                event: {},
                dataByCoordSys: i.dataByCoordSys,
                tooltipOption: i.tooltipOption
            }, o) : null != i.seriesIndex ? this._manuallyAxisShowTip(t, e, n, i) || (t = (a = Jf(i, e)).point[0], 
            e = a.point[1], null != t && null != e && this._tryShow({
                offsetX: t,
                offsetY: e,
                position: i.position,
                target: a.el,
                event: {}
            }, o)) : null != i.x && null != i.y && (n.dispatchAction({
                type: "updateAxisPointer",
                x: i.x,
                y: i.y
            }), this._tryShow({
                offsetX: i.x,
                offsetY: i.y,
                position: i.position,
                target: n.getZr().findHover(i.x, i.y).target,
                event: {}
            }, o)));
        },
        manuallyHideTip: function(t, e, n, i) {
            var o = this._tooltipContent;
            !this._alwaysShowContent && this._tooltipModel && o.hideLater(this._tooltipModel.get("hideDelay")), 
            this._lastX = this._lastY = null, i.from !== this.uid && this._hide(qa(i, n));
        },
        _manuallyAxisShowTip: function(t, e, n, i) {
            var o = i.seriesIndex, r = i.dataIndex, a = e.getComponent("axisPointer").coordSysAxesInfo;
            if (null != o && null != r && null != a && (e = e.getSeriesByIndex(o), e && "axis" === (t = Ya([ e.getData().getItemModel(r), e, (e.coordinateSystem || {}).model, t ])).get("trigger"))) return n.dispatchAction({
                type: "updateAxisPointer",
                seriesIndex: o,
                dataIndex: r,
                position: i.position
            }), !0;
        },
        _tryShow: function(t, e) {
            var n, i = t.target;
            this._tooltipModel && (this._lastX = t.offsetX, this._lastY = t.offsetY, (n = t.dataByCoordSys) && n.length ? this._showAxisTooltip(n, t) : i && null != i.dataIndex ? (this._lastDataByCoordSys = null, 
            this._showSeriesItemTooltip(t, i, e)) : i && i.tooltip ? (this._lastDataByCoordSys = null, 
            this._showComponentItemTooltip(t, i, e)) : (this._lastDataByCoordSys = null, this._hide(e)));
        },
        _showOrMove: function(t, e) {
            t = t.get("showDelay"), e = v(e, this), clearTimeout(this._showTimout), 0 < t ? this._showTimout = setTimeout(e, t) : e();
        },
        _showAxisTooltip: function(t, e) {
            var h = this._ecModel, n = this._tooltipModel, i = [ e.offsetX, e.offsetY ], u = [], c = [], o = Ya([ e.tooltipOption, n ]), d = this._renderMode, f = this._newLine, p = {};
            pp(t, function(t) {
                pp(t.dataByAxis, function(o) {
                    var r, t, a = h.getComponent(o.axisDim + "Axis", o.axisIndex), s = o.value, l = [];
                    a && null != s && (r = Ha(s, a.axis, h, o.seriesDataIndices, o.valueLabelOpt), I(o.seriesDataIndices, function(t) {
                        var e, n = h.getSeriesByIndex(t.seriesIndex), i = t.dataIndexInside;
                        (t = n && n.getDataParams(i)).axisDim = o.axisDim, t.axisIndex = o.axisIndex, t.axisType = o.axisType, 
                        t.axisId = o.axisId, t.axisValue = Kr(a.axis, s), t.axisValueLabel = r, t && (c.push(t), 
                        D(n = n.formatTooltip(i, !0, null, d)) ? (e = n.html, i = n.markers, g(p, i)) : e = n, 
                        l.push(e));
                    }), t = r, u.push("html" !== d ? l.join(f) : (t ? hi(t) + f : "") + l.join(f)));
                });
            }, this), u.reverse(), u = u.join(this._newLine + this._newLine);
            var r = e.position;
            this._showOrMove(o, function() {
                this._updateContentNotChangedOnAxis(t) ? this._updatePosition(o, r, i[0], i[1], this._tooltipContent, c) : this._showTooltipContent(o, u, c, Math.random(), i[0], i[1], r, void 0, p);
            });
        },
        _showSeriesItemTooltip: function(t, e, n) {
            var i, o, r, a, s = this._ecModel, l = e.seriesIndex, h = s.getSeriesByIndex(l), u = e.dataModel || h, c = e.dataIndex, s = e.dataType, d = Ya([ (e = u.getData()).getItemModel(c), u, h && (h.coordinateSystem || {}).model, this._tooltipModel ]);
            null != (h = d.get("trigger")) && "item" !== h || (o = u.getDataParams(c, s), s = u.formatTooltip(c, !1, s, this._renderMode), 
            r = D(s) ? (i = s.html, s.markers) : (i = s, null), a = "item_" + u.name + "_" + c, 
            this._showOrMove(d, function() {
                this._showTooltipContent(d, i, o, a, t.offsetX, t.offsetY, t.position, t.target, r);
            }), n({
                type: "showTip",
                dataIndexInside: c,
                dataIndex: e.getRawIndex(c),
                seriesIndex: l,
                from: this.uid
            }));
        },
        _showComponentItemTooltip: function(t, e, n) {
            var i = e.tooltip;
            "string" == typeof i && (i = {
                content: i,
                formatter: i
            });
            var o = new Zn(i, this._tooltipModel, this._ecModel), r = o.get("content"), a = Math.random();
            this._showOrMove(o, function() {
                this._showTooltipContent(o, r, o.get("formatterParams") || {}, a, t.offsetX, t.offsetY, t.position, e);
            }), n({
                type: "showTip",
                from: this.uid
            });
        },
        _showTooltipContent: function(n, t, i, e, o, r, a, s, l) {
            var h, u, c;
            this._ticket = "", n.get("showContent") && n.get("show") && (h = this._tooltipContent, 
            u = n.get("formatter"), a = a || n.get("position"), c = t, u && "string" == typeof u ? c = ui(u, i, !0) : "function" == typeof u && (t = fp(function(t, e) {
                t === this._ticket && (h.setContent(e, l, n), this._updatePosition(n, a, o, r, h, i, s));
            }, this), this._ticket = e, c = u(i, e, t)), h.setContent(c, l, n), h.show(n), this._updatePosition(n, a, o, r, h, i, s));
        },
        _updatePosition: function(t, s, e, n, i, o, r) {
            var a = this._api.getWidth(), l = this._api.getHeight();
            s = s || t.get("position");
            var h, u, c, d, f = i.getSize(), p = t.get("align"), g = t.get("verticalAlign"), m = r && r.getBoundingRect().clone();
            r && m.applyTransform(r.transform), "function" == typeof s && (s = s([ e, n ], o, i.el, m, {
                viewSize: [ a, l ],
                contentSize: f.slice()
            })), x(s) ? (e = gp(s[0], a), n = gp(s[1], l)) : D(s) ? (s.width = f[0], s.height = f[1], 
            e = (c = gi(s, {
                width: a,
                height: l
            })).x, n = c.y, g = p = null) : (e = (d = "string" == typeof s && r ? function(t) {
                var e = f[0], n = f[1], i = 0, o = 0, r = t.width, a = t.height;
                switch (s) {
                  case "inside":
                    i = t.x + r / 2 - e / 2, o = t.y + a / 2 - n / 2;
                    break;

                  case "top":
                    i = t.x + r / 2 - e / 2, o = t.y - n - 5;
                    break;

                  case "bottom":
                    i = t.x + r / 2 - e / 2, o = t.y + a + 5;
                    break;

                  case "left":
                    i = t.x - e - 5, o = t.y + a / 2 - n / 2;
                    break;

                  case "right":
                    i = t.x + r + 5, o = t.y + a / 2 - n / 2;
                }
                return [ i, o ];
            }(m) : (h = e, d = n, u = a, o = l, c = p ? null : 20, r = g ? null : 20, s = (m = (s = i).getOuterSize()).width, 
            m = m.height, null != c && (u < h + s + c ? h -= s + c : h += c), null != r && (o < d + m + r ? d -= m + r : d += r), 
            [ h, d ]))[0], n = d[1]), p && (e -= ja(p) ? f[0] / 2 : "right" === p ? f[0] : 0), 
            g && (n -= ja(g) ? f[1] / 2 : "bottom" === g ? f[1] : 0), t.get("confine") && (p = e, 
            g = n, f = a, t = l, a = (l = (a = i).getOuterSize()).width, l = l.height, p = Math.min(p + a, f) - a, 
            g = Math.min(g + l, t) - l, e = (d = [ p = Math.max(p, 0), g = Math.max(g, 0) ])[0], 
            n = d[1]), i.moveTo(e, n);
        },
        _updateContentNotChangedOnAxis: function(n) {
            var t = this._lastDataByCoordSys, r = !!t && t.length === n.length;
            return r && pp(t, function(t, e) {
                var t = t.dataByAxis || {}, o = (n[e] || {}).dataByAxis || [];
                (r &= t.length === o.length) && pp(t, function(t, e) {
                    var n = o[e] || {}, e = t.seriesDataIndices || [], i = n.seriesDataIndices || [];
                    (r &= t.value === n.value && t.axisType === n.axisType && t.axisId === n.axisId && e.length === i.length) && pp(e, function(t, e) {
                        e = i[e], r &= t.seriesIndex === e.seriesIndex && t.dataIndex === e.dataIndex;
                    });
                });
            }), this._lastDataByCoordSys = n, !!r;
        },
        _hide: function(t) {
            this._lastDataByCoordSys = null, t({
                type: "hideTip",
                from: this.uid
            });
        },
        dispose: function(t, e) {
            ts.node || (this._tooltipContent.hide(), Ea("itemTooltip", e));
        }
    }), Uo({
        type: "showTip",
        event: "showTip",
        update: "tooltip:manuallyShowTip"
    }, function() {}), Uo({
        type: "hideTip",
        event: "hideTip",
        update: "tooltip:manuallyHideTip"
    }, function() {}), t.version = "4.3.0", t.dependencies = gd, t.PRIORITY = Bu, t.init = function(t, e, n) {
        if ($a) {
            if (+"4.1.0".replace(".", "") < +gd.zrender.replace(".", "")) throw new Error("zrender/src 4.1.0 is too old for ECharts 4.3.0. Current version need ZRender " + gd.zrender + "+");
            if (!t) throw new Error("Initialize failed: invalid dom.");
        }
        var i, o, r = Vo(t);
        return r ? ($a && console.warn("There is a chart instance already initialized on the dom."), 
        r) : ($a && (!h(t) || "CANVAS" === t.nodeName.toUpperCase() || (t.clientWidth || n && null != n.width) && (t.clientHeight || n && null != n.height) || console.warn("Can't get DOM width or height. Please check dom.clientWidth and dom.clientHeight. They should not be 0.For example, you may need to call this in the callback of window.onload.")), 
        (n = new To(t, e, n)).id = "ec_" + Pd++, kd[n.id] = n, Ee(t, Ld, n.id), i = n, o = "__connectUpdateStatus", 
        cd(bd, function(t, e) {
            i._messageCenter.on(e, function(t) {
                var e, n;
                Ad[i.group] && 0 !== i[o] && (t && t.escapeConnect || (e = i.makeActionFromEvent(t), 
                n = [], cd(kd, function(t) {
                    t !== i && t.group === i.group && n.push(t);
                }), a(n, 0), cd(n, function(t) {
                    1 !== t[o] && t.dispatchAction(e);
                }), a(n, 2)));
            });
        }), n);
        function a(t, e) {
            for (var n = 0; n < t.length; n++) t[n][o] = e;
        }
    }, t.connect = function(e) {
        var t;
        return x(e) && (t = e, e = null, cd(t, function(t) {
            null != t.group && (e = t.group);
        }), e = e || "g_" + Od++, cd(t, function(t) {
            t.group = e;
        })), Ad[e] = !0, e;
    }, t.disConnect = Ho, t.disconnect = $u, t.dispose = function(t) {
        "string" == typeof t ? t = kd[t] : t instanceof To || (t = Vo(t)), t instanceof To && !t.isDisposed() && t.dispose();
    }, t.getInstanceByDom = Vo, t.getInstanceById = function(t) {
        return kd[t];
    }, t.registerTheme = Wo, t.registerPreprocessor = Go, t.registerProcessor = Xo, 
    t.registerPostUpdate = function(t) {
        Td.push(t);
    }, t.registerAction = Uo, t.registerCoordinateSystem = function(t, e) {
        ki.register(t, e);
    }, t.getCoordinateSystemDimensions = function(t) {
        return (t = ki.get(t)) ? t.getDimensionsInfo ? t.getDimensionsInfo() : t.dimensions.slice() : void 0;
    }, t.registerLayout = Yo, t.registerVisual = qo, t.registerLoading = Zo, t.extendComponentModel = Ko, 
    t.extendComponentView = $o, t.extendSeriesModel = function(t) {
        return Xc.extend(t);
    }, t.extendChartView = function(t) {
        return oo.extend(t);
    }, t.setCanvasCreator = function(t) {
        var e = t;
        (t = "createCanvas") === t && (Ka = null), hs[t] = e;
    }, t.registerMap = function(t, e, n) {
        t = t, n = n, I(n = x(e = e) ? e : e.svg ? [ {
            type: "svg",
            source: e.svg,
            specialAreas: e.specialAreas
        } ] : (e.geoJson && !e.features && (n = e.specialAreas, e = e.geoJson), [ {
            type: "geoJSON",
            source: e,
            specialAreas: n
        } ]), function(t) {
            var e = t.type;
            "geoJson" === e && (e = t.type = "geoJSON");
            var n = hd[e];
            $a && w(n, "Illegal map type: " + e), n(t);
        }), ld.set(t, n);
    }, t.getMap = function(t) {
        return e = t, (t = ld.get(e)) && t[0] && {
            geoJson: t[0].geoJSON,
            specialAreas: t[0].specialAreas
        };
        var e;
    }, t.dataTool = {};
});